Ошибка компилятора C2299
Обновлен: Ноябрь 2007
Сообщение об ошибке
"функция": изменение поведения. Явная специализация не может быть конструктором копии или оператором назначения копии
'function' : behavior change: an explicit specialization can not be a copy constructor or copy assignment operator
Это ошибка может генерироваться в результате работы согласованности компилятора, выполненной для Visual C++ 2005: предыдущие версии Visual C++ допускали явную специализацию для конструктора копий или оператора назначения копий.
Для устранения ошибки C2299 используйте конструктор копий или оператор назначения не в качестве функции шаблона, а в качестве нешаблонной функции, которая принимает тип класса. В любом коде, который вызывает конструктора копий или оператора назначений путем явного указания аргументов шаблона, необходимо удалить аргументы шаблона.
Дополнительные сведения см. в разделе Критические изменения в компиляторе Visual C++ 2005.
Следующий пример приводит к возникновению ошибки C2299:
// C2299.cpp
// compile with: /c
class C {
template <class T>
C (T t);
template <> C (const C&); // C2299
C (const C&); // OK
};