Мне кажется, что C ++ не допускает специализацию шаблона элемента в любой области, кроме пространства имен и глобальной области (MS VSC ++ Ошибка C3412). Но для меня имеет смысл специализировать шаблон основного члена базового класса в производном классе, потому что это то, что делают производные классы - специализировать вещи в базовом классе. Например, рассмотрим следующий пример:
struct Base
{
template <class T>
struct Kind
{
typedef T type;
};
};
struct Derived : public Base
{
/* Not Allowed */
using Base::Kind;
template <>
struct Kind <float>
{
typedef double type;
};
};
int main(void)
{
Base::Kind<float>::type f; // float type desired
Derived::Kind<float>::type i; // double type desired but does not work.
}
Мой вопрос: почему это не разрешено?