специализировать шаблон члена без специализации его родителя

У меня есть шаблон класса, вложенный в другой шаблон. Частично специализировать это легко: я просто объявляю другое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 > {};

(Я оставил весь свой нерабочий код; закомментируйте его соответствующим образом, чтобы попытаться разобраться.)

Ответы на вопрос(4)

Ваш ответ на вопрос