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