Вложенные шаблоны с зависимой областью

Что такое зависимая область действия и каково значение typename в контексте следующей ошибки?

$ make g++ -std=gnu++0x main.cpp main.cpp:18:10: error: need 'typename' before 'ptrModel<std::vector >::Type' because 'ptrModel<std::vector >' is a dependent scope make: *** [all] Error 1 /* * main.cpp */ #include  #include  template struct ptrModel { typedef std::unique_ptr Type; }; template struct ptrType { typedef ptrModel< std::vector >::Type Type; }; int main() { return 0; } 

One Solution collect form web for “Вложенные шаблоны с зависимой областью”

Компилятор рассказал вам, что делать. Напишите typename перед ptrModel >::Type , например:

  typedef typename ptrModel >::Type Type; 

Причиной этого требования является то, что на данный момент компилятор не знает, будет ли ptrModel >::Type описывать переменную-член или вложенный тип. Он даже не может понять этого, посмотрев определение ptrModel потому что может быть специализация ptrModel для std::vector где-то еще в программе, что она еще не получила изменений, какие из этих вещей ::Type относится к. Поэтому вам нужно прямо сказать это.

Имя ptrModel >::Type имеет «зависимую область», потому что он находится в области, которая зависит от создания шаблона.

  • Почему бы не вывести параметр шаблона из конструктора?
  • Полиморфизм шаблонов C ++
  • Почему разрешена частичная специализация шаблона вложенного шаблона, а полная - нет?
  • Почему нам нужен непреложный class?
  • Строки C-Style в качестве аргументов шаблона?
  • Почему аргумент шаблона не может быть выведен, если он используется в качестве параметра шаблона для другого шаблона?
  • Неопределенная эталонная ошибка для метода шаблона
  • Как легко отобразить перечислимые переменные c ++ в строки
  • Неявное преобразование типа C ++ с шаблоном
  • Каковы некоторые параметры шаблона шаблона?
  • Обходное решение для вывода аргумента шаблона в невыводимом контексте
  • Давайте будем гением компьютера.