Это не выводимый контекст. Вот почему аргумент шаблона не может быть выведен компилятором.
Представьте себе, вы могли бы специализировать A
следующим образом:
template <>
struct A<SomeType>
{
typedef std::map <double, double> B;
};
Теперь эта специализация имеет вложенный тип с именем B
, который является typedef, равным std::map<double,double>
.
Так как бы компилятор мог определить тип SomeType
, учитывая, что A<SomeType>::B
равно std::map<double, double>
?
И на самом деле таких специализаций может быть много:
template <>
struct A<SomeOtherType>
{
typedef std::map <double, double> B;
};
Даже эта специализация имеет B
как вложенный тип.
Теперь, если я скажу A<T>::B
- это std::map<double,double>
, тогда вы можете сказать, что такое T
? Это SomeType
? или SomeOtherType
?