специализировать шаблон члена без специализации его родителя
У меня есть шаблон класса, вложенный в другой шаблон. Частично специализировать это легко: я просто объявляю другоеtemplate< … >
блок внутри его родителя.
Тем не менее, мне нужна еще одна частичная специализация, которая определяет все аргументы локального шаблона. Это превращает это в явную специализацию. Явные специализации по какой-либо причине должны находиться в области имен. Чтобы объявить его вне родительского класса, родительский объект должен быть назначен, что требует непустого списка аргументов шаблона. Это подразумевает частичную специализацию. Частичная специализацияявляется что я'я делаю, и этоПредполагается работать в произвольной внешней области. Но и GCC, и Comeau не смогли определить параметр шаблона в номинации родителей с формальными аргументами частичной специализации.
template< class X > struct A {
template< class Y > struct B; // initial declaration OK
template< class Z >
struct B< A< Z > > {}; // partial OK as long as there's a local arg
template // ERROR: this syntax triggers explicit specialization
struct B< int > {};
};
template // ERROR: can't nest templates here (why?)
template< class X > // ERROR: can't deduce X from type of A::B (why?)
struct A< X >::B< int > {};
(Я оставил весь свой нерабочий код; закомментируйте его соответствующим образом, чтобы попытаться разобраться.)