C++ template specialization of function: "illegal use of explicit template arguments"

37,116

Function templates cannot be partially specialised, only fully, i.e. like that:

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

}

For why function templates cannot be partially specialised, you may want to read this.

When you specialise partially (only possible for classes), you'd have to do it like that:

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

};

so you have to list T1 again.

The way your specialisations are written, they would be ambiguous for spec1<int, int>.

Share:
37,116
jameszhao00
Author by

jameszhao00

rabble

Updated on July 09, 2022

Comments

  • jameszhao00
    jameszhao00 almost 2 years

    The following template specialization code:

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

    Test case 1:

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

    Test case 2:

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

    generates the following compilation error:

    error C2768: 'spec1' : illegal use of explicit template arguments

    Does anyone know why?