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.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage