template<int x> struct A {
template<int y> struct B {};.
template<int y, int unused> struct C {};
};
template<int x> template<>
struct A<x>::B<x> {}; // error: enclosing class templates are not explicitly specialized
template<int x> template<int unused>
struct A<x>::C<x, unused> {}; // ok
Итак, почему явная специализация внутреннего, вложенного класса (или функции) недопустима, если внешний класс тоже не специализируется? Как ни странно, я могу обойти это поведение, если только частично специализируют внутренний класс, просто добавляя параметр шаблона фиктивного шаблона. Делает вещи более уродливыми и более сложными, но это работает.Почему частичное задание шаблона вложенного шаблона разрешено, а полное - нет?
Я бы рассмотрел полные специализации как подмножество частичных специализаций - особенно потому, что вы можете выразить каждую полную специализацию в качестве частичного с добавлением фиктивного параметра. Таким образом, это двусмысленность между частичной и полной специализацией для меня действительно не имеет смысла.
К сожалению, никто на comp.std.C++ не осмелился ответить, поэтому я снова помещаю его сюда с щедростью.
Примечание. Мне нужна эта функция для рекурсивных шаблонов внутреннего класса для набора внешнего класса, а специализация внутреннего параметра зависит от параметра внешнего шаблона.
Что же касается, почему я предлагаю просить здесь вместо: HTTP : //groups.google.com/group/comp.std.c++ –
Спасибо за предложение. – hirschhornsalz