Шаблонный класс неполной специализации
Я наткнулся на интересный момент, который я не смог объяснить или найти объяснение. Рассмотрим следующее определение шаблона (скомпилировано с 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()
{
}
И я не могу понять, почему. Это сознательное дизайнерское решение, принятое, чтобы избежать какой-то проблемы, которую я не могу предвидеть? Это недосмотр?
Заранее спасибо.