Clase de plantilla de especialización incompleta.

Me encontré con un punto interesante que no pude explicar o encontrar una explicación. Considere la siguiente definición de plantilla (compilada con mingw g ++ 4.6.2):

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

Si queremos, podemos especializar completamente cualquier función de miembro único:

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

Pero la especialización parcial falla con un "uso no válido de tipo incompleto 'clase Foo <...>'" error:

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

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

Y no puedo entender por qué. ¿Es una decisión de diseño consciente tomada para evitar un problema que no puedo prever? ¿Es un descuido?

Gracias por adelantado.

Respuestas a la pregunta(3)

Su respuesta a la pregunta