Compiler Error C2912
Visual Studio 2015
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at Compiler Error C2912.
explicit specialization 'declaration' is not a specialization of a function template
You cannot specialize a non-template function.
The following sample generates C2912:
// C2912.cpp // compile with: /c void f(char); template<> void f(char); // C2912 template<class T> void f(T); // OK
This error will also be generated as a result of compiler conformance work that was done in Visual Studio .NET 2003: for every explicit specialization, you must choose the parameters of the explicit specialization, such that, they match the parameters of the primary template.
// C2912b.cpp
class CF {
public:
template <class A> CF(const A& a) {} // primary template
// attempted explicit specialization
template <> CF(const char* p) {} // C2912
// try the following line instead
// template <> CF(const char& p) {}
};
Show: