Что такое зависимая область действия и каково значение typename в контексте следующей ошибки?Вложенные шаблоны с зависимой областью
$ 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;
}
Хорошо, но не правда ли, что нет смысла вводить переменную-член? – user383352
Да, но это не обязательно поможет из-за некоторых подробностей о том, как шаблоны анализируются компилятором. См. Принятый ответ на этот вопрос: http://stackoverflow.com/questions/642229/why-do-i-need-to-use-typedef-typename-in-g-but-not-vs –
Я также нашел [ этот ответ] (http://stackoverflow.com/a/6571836/24874), чтобы быть очень полезной при первой встрече с этой ошибкой и концепцией. –