Ошибка компилятора C2912
Обновлен: Ноябрь 2007
Сообщение об ошибке
явная специализация; 'declaration' не является специализацией шаблона функции.
explicit specialization; 'declaration' is not a specialization of a function template.
Нельзя специализировать нешаблонную функцию.
Следующий пример генерирует ошибку C2912:
// C2912.cpp
// compile with: /c
void f(char);
template<> void f(char); // C2912
template<class T> void f(T); // OK
Эта ошибка может также возникать как результат согласованной работы компилятора, выполненной в Visual Studio .NET 2003: для каждой явной специализации необходимо выбрать такие параметры явной специализации, чтобы они соответствовали параметрам основного шаблона.
Дополнительные сведения см. в разделе Сводная информация о критических изменениях времени компиляции.
// 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) {}
};