Dependent Area Nested Templates

What is a dependent scope and what is the meaning of typename in the context of the following error?

$ make g++ -std=gnu++0x main.cpp main.cpp:18:10: error: need 'typename' before 'ptrModel<std::vector<Data> >::Type' because 'ptrModel<std::vector<Data> >' is a dependent scope make: *** [all] Error 1 /* * main.cpp */ #include <vector> #include <memory> template<typename T> struct ptrModel { typedef std::unique_ptr<T> Type; }; template<typename Data> struct ptrType { typedef ptrModel< std::vector<Data> >::Type Type; }; int main() { return 0; } 
+76
c ++ scope templates nested
Jul 22 '10 at 17:30
source share
1 answer

The compiler told you what to do. Write typename before ptrModel<std::vector<Data> >::Type , for example:

  typedef typename ptrModel<std::vector<Data> >::Type Type; 

The reason for this requirement is that the compiler does not currently know if ptrModel<std::vector<Data> >::Type describes a member variable or nested type. He cannot even figure it out by looking at the definition of ptrModel , because for std::vector<Data> may be a specialization of ptrModel in the program where it has not yet received changes, which of these changes ::Type means. Therefore, you need to explicitly state this.

The name ptrModel<std::vector<Data> >::Type has a "dependent scope" because it is in a scope that depends on the creation of the template.

+118
Jul 22 '10 at 17:31
source share



All Articles