Specjalizuję się w szablonie członka bez specjalizacji jego rodzica

Mam szablon klasy zagnieżdżony w innym szablonie. Częściowa specjalizacja jest łatwa: po prostu deklaruję innątemplate< … > zablokować wewnątrz swojego rodzica.

Potrzebuję jednak innej częściowej specjalizacji, która zdarza się określać wszystkie lokalne argumenty szablonu. To czyni z niej wyraźną specjalizację. Jawne specjalizacje, niezależnie od powodu, muszą być w zakresie przestrzeni nazw. Aby zadeklarować go poza klasą nadrzędną, rodzic musi być nominowany, co wymaga niepustej listy argumentów szablonu. Oznacza to częściową specjalizację. Częściowa specjalizacjajest co robię i ma działać w dowolnym zewnętrznym zakresie. Jednak zarówno GCC, jak i Comeau nie potrafią zidentyfikować parametru szablonu w nominacji rodzica z argumentami formalnymi częściowej specjalizacji.

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 template<>s here (why?)
template< class X > // ERROR: can't deduce X from type of A<X>::B<int> (why?)
struct A< X >::B< int > {};

(Zostawiłem cały mój niepracujący kod; skomentuj go odpowiednio, aby spróbować zrozumieć).

questionAnswers(4)

yourAnswerToTheQuestion