Niekompletna klasa szablonów

Natknąłem się na interesujący punkt, którego nie byłem w stanie wyjaśnić ani znaleźć wyjaśnienia. Rozważ następującą definicję szablonu (skompilowaną z mingw g ++ 4.6.2):

template <typename T, typename S>
class Foo
{
public:
    void f(){}
    void g(){}
};

Jeśli chcemy, możemy w pełni wyspecjalizować każdą funkcję pojedynczego członka:

template <>
void Foo<char,int>::f() {}

Ale częściowa specjalizacja kończy się niepowodzeniem z błędem „nieprawidłowe użycie niekompletnego typu„ class Foo <...> ””:

template <typename T, typename S>
void Foo<T,S*>::f()
{
}

template <typename T>
void Foo<T,int>::f()
{
}

I nie mogę zrozumieć dlaczego. Czy podjęto świadomą decyzję projektową, aby uniknąć jakiegoś problemu, którego nie mogę przewidzieć? Czy to przeoczenie?

Z góry dziękuję.

questionAnswers(3)

yourAnswerToTheQuestion