AFAIK, który został zmieniony w C ++ 0x.
Myślę, że to tylko przeoczenie (biorąc pod uwagę, że zawsze można uzyskać częściowy efekt specjalizacji za pomocą bardziej rozwlekłego kodu, umieszczając funkcję jako static
członek klasy).
Możesz poszukać odpowiedniego DR (raport defektu), jeśli taki istnieje.
EDYCJA : sprawdzając to, stwierdzam, że inni też w to uwierzyli, ale nikt nie jest w stanie znaleźć takiego wsparcia w projekcie normy. Ten wątek SO wydaje się wskazywać, że częściowa specjalizacja szablonów funkcji nie jest obsługiwana w C ++ 0x .
EDYCJA 2 : tylko przykład tego, co miałem na myśli przez „umieszczanie funkcji jako static
członka klasy”:
#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) {}
teżtemplate<> void f(int t, char u) {}
jest dozwolone.