2015-07-14 19 views
6

Ich habe ein Problem mit dem Schlüsselwort 'using' in C++ 11. Dieser Codeabschnitt sollte einen Alias ​​für einen Zeiger auf einen anderen Typ erstellen.Vorlagen-Alias ​​für einen anderen Alias ​​

template <typename T> 
class SomeClass 
{ 
    typedef typename std::add_pointer<T>::type pointer; 

    template <typename U> 
    using rebind_pointer = typename std::pointer_traits<pointer>::rebind<U>; 
} 

SomeClass<int> obj; 

Aber in gcc 4.7 Ich habe Kompilierungsfehler bekam:

typename std::pointer_traits<int*>::rebind names template<class _Up> using rebind = _Up* , which is not a type

Ich fand heraus, dass pointer_traits :: rebind eine Vorlage alias selbst, dass so vielleicht ist Problem?

Antwort

9

Sie müssen den Compiler sagen rebind als Vorlage zu analysieren:

template <typename U> 
using rebind_pointer = typename std::pointer_traits<pointer>::template rebind<U>; 
//               ^^^^^^^^ 

Dies ist notwendig, weil std::pointer_traits<pointer> auf einem Template-Parameter abhängig ist (T).

Weitere Informationen darüber, wann und warum Sie das Schlüsselwort template verwenden müssen, finden Sie unter this question.

Verwandte Themen