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ć).