template parameters not used in partial specialization
-
Minimalbeispiel:
template<class X> struct Test; template<class A, class B> struct Test2 { // Zeile 28 template<class C> struct Test3 { }; }; template<class A, class B, class C> struct Test<typename Test2<A,B>::template Test3<C> > { };Fehlermeldung:
test.cpp:28:8: error: template parameters not used in partial specialization:
test.cpp:28:8: error: ‘A’
test.cpp:28:8: error: ‘B’compiler:
g++ (SUSE Linux) 4.5.0 20100604 [gcc-4_5-branch revision 160292]Ist das ein Compiler-spezifischer fehler? Ich glaube das mit äkteren Compilern schon übersetzt zu haben ...
-
LIPS schrieb:
template<class A, class B, class C> struct Test<typename Test2<A,B>::template Test3<C> > { };typename Test2<A,B>::template Test3<C> ist kein "deduzibler Kontext" bzgl A und B. Das heißt, der Compiler kann aus dem Template-Parameter X nicht ableiten, was A und B sein soll.
Lösen könnte man das, indem Du Test3 als Template mit 3 Parametern außerhalb von Test2 deklarierst:
template<class A, class B, class C> struct Test3 { }; template<class A, class B, class C> struct Test<Test3<A,B,C> > { };