c++ templates template-specialization typename

Especialización de la plantilla en C++ de la función: "uso ilegal de argumentos de plantilla explícitos"



templates template-specialization (1)

Las plantillas de funciones no se pueden especializar parcialmente, solo en su totalidad, es decir, así:

template<> void spec1<char, int>() { }

Por qué las plantillas de funciones no pueden ser parcialmente especializadas, puede leer esto .

Cuando te especializas parcialmente (solo es posible para las clases), deberías hacerlo así:

template <typename T1> class class1<T1, int> { };

así que tienes que listar T1 nuevo.

La forma en que se escriben sus especializaciones, serían ambiguas para spec1<int, int> .

El siguiente código de especialización de plantillas:

template<typename T1, typename T2> void spec1() { }

Caso de prueba 1:

template< typename T1> //compile error void spec1<int>() { }

Caso de prueba 2:

template< typename T2> //compile error void spec1<int>() { }

genera el siguiente error de compilación:

error C2768: ''spec1'': uso ilegal de argumentos de plantilla explícitos

¿Alguien sabe por qué?