Поделиться через


Ошибка компилятора 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
};