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ę.