Define template specialization in cpp?

David picture David · Oct 23, 2012 · Viewed 15.4k times · Source

I can define a specialized function in a cpp like so...

// header

template<typename T>
void func(T){}

template<>
void func<int>(int);

// cpp

template<>
void func<int>(int)
{}

How can I define a method in a specialized class in a cpp? Like so (which doesn't work, I get error C2910: 'A<int>::func' : cannot be explicitly specialized)...

// header

template<typename T>
struct A
{
    static void func(T){}
};

template<>
struct A<int>
{
    static void func(int);
};

// cpp

template<>
void A<int>::func(int)
{}

Answer

Rost picture Rost · Oct 23, 2012

Use following syntax in your .cpp file:

void A<int>::func(int)
{
}

This is Visual C++ kinda feature.

See MSDN C2910 error description for details:

This error will also be generated as a result of compiler conformance work that was done in Visual Studio .NET 2003:. For code will be valid in the Visual Studio .NET 2003 and Visual Studio .NET versions of Visual C++, remove template <>.