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