AFAIK, що змінено на C ++ 0x.
Я припускаю, що це був просто недогляд (враховуючи, що ви завжди можете отримати ефект часткової спеціалізації за допомогою більш детального коду, розмістивши функцію як static
члена класу).
Ви можете переглянути відповідний DR (Звіт про дефекти), якщо він є.
РЕДАКТУВАТИ : перевіряючи це, я виявляю, що інші також вірили в це, але ніхто не може знайти такої підтримки в проекті стандарту. Цей потік SO, схоже, вказує на те, що часткова спеціалізація шаблонів функцій не підтримується в C ++ 0x .
EDIT 2 : лише приклад того, що я мав на увазі під "розміщенням функції як static
члена класу":
#include <iostream>
using namespace std;
void say( char const s[] ) { std::cout << s << std::endl; }
namespace detail {
template< class T, class U >
struct F {
static void impl() { say( "1. primary template" ); }
};
template<>
struct F<int, char> {
static void impl() { say( "2. <int, char> explicit specialization" ); }
};
template< class T >
struct F< char, T > {
static void impl() { say( "3. <char, T> partial specialization" ); }
};
template< class T >
struct F< T, int > {
static void impl() { say( "4. <T, int> partial specialization" ); }
};
}
template< class T, class U >
void f() { detail::F<T, U>::impl(); }
int main() {
f<char const*, double>();
f<int, char>();
f<char, double>();
f<double, int>();
}
template<typename T, typename U> void f(T t, U u) {}
такожtemplate<> void f(int t, char u) {}
дозволено.