У меня проблемы со специализацией внутреннего шаблона, когда все его параметры известны. Вот пример:
template < typename T0 >
struct outer
{
template < typename T1 = void, typename T2 = void >
struct inner
{
typedef T1 type;
};
};
template < typename T0 >
template < typename T1 >
struct outer<T0>::inner<double,T1> { typedef int type; };
Это прекрасно работает. Если я вместо этого укажу внутренний шаблон таким образом, он не будет:
template < typename T0 >
template < >
struct outer<T0>::inner<double,void> { typedef int type; };
В связи с этим я получаю сообщение об ошибке: «Недопустимая явная специализация перед токеном‘> ’... включающие шаблоны классов не являются явно специализированными ... параметры шаблона не используются в частичной специализации: ... T0». Не уверен, что здесь происходит WTAF.
Я тоже пробовал это:
template < typename T0 >
struct outer<T0>::inner<double,void> { typedef int type; };
Я ожидал, что это не удастся, и сообщение об ошибке неудивительно. Это было: "слишком мало списков-параметров-шаблонов".
Итак, как правильно это сделать? Я, конечно, могу обойти это, но если мне это не нужно, я бы предпочел этого не делать.