Параметры параметров шаблона шаблона не получают аргументов и, следовательно, обычно не имеют имен.Частичная специализация является исключением из этого правила.Попробуйте вместо этого:
template<class> // Derived<E> is only only parameter
struct X; // but you actually need two parameters, Derived and E
template< template <class> class Derived, class E >
struct X< Derived< E > > // so use partial specialization.
{
static void f()
{
Derived<E>::value; // only reason to want this is to
Derived<int>::value; // use different specializations
}
};
Конечно, если вам не нужно повторно специализироваться на Derived< something_else >
, просто игнорируйте тот факт, что Derived<E>
является специализацией шаблона:
template<class Derived>
struct X
{
static void f()
{
Derived::value;
}
};
X< my_class< something > > my_x; // a specialized class template is a class