Шаблонный класс неполной специализации

Я наткнулся на интересный момент, который я не смог объяснить или найти объяснение. Рассмотрим следующее определение шаблона (скомпилировано с mingw g ++ 4.6.2):

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

Если мы хотим, мы можем полностью специализировать любую отдельную функцию-член:

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

Но частичная специализация завершается с ошибкой «недопустимое использование неполного типа 'class Foo <...>'":

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

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

И я не могу понять, почему. Это сознательное дизайнерское решение, принятое, чтобы избежать какой-то проблемы, которую я не могу предвидеть? Это недосмотр?

Заранее спасибо.

Ответы на вопрос(3)

Ваш ответ на вопрос