Template-Klasse unvollständige Spezialisierung
Ich bin auf einen interessanten Punkt gestoßen, für den ich keine Erklärung finden oder erklären konnte. Betrachten Sie die folgende Vorlagendefinition (kompiliert mit mingw g ++ 4.6.2):
template <typename T, typename S>
class Foo
{
public:
void f(){}
void g(){}
};
Wenn wir wollen, können wir uns auf jede einzelne Mitgliedsfunktion spezialisieren:
template <>
void Foo<char,int>::f() {}
Eine teilweise Spezialisierung schlägt jedoch mit dem Fehler "Ungültige Verwendung des unvollständigen Typs 'class Foo <...>'" fehl:
template <typename T, typename S>
void Foo<T,S*>::f()
{
}
template <typename T>
void Foo<T,int>::f()
{
}
Und ich kann nicht herausfinden warum. Ist es eine bewusste Designentscheidung, um ein Problem zu vermeiden, das ich nicht vorhersehen kann? Ist es ein Versehen?
Danke im Voraus.