Partager via


Erreur du compilateur C2299

Mise à jour : novembre 2007

Message d'erreur

'fonction' : changement de comportement : une spécialisation explicite ne peut pas être un constructeur de copie ou un opérateur d'assignation de copie
'function' : behavior change: an explicit specialization can not be a copy constructor or copy assignment operator

Cette erreur peut également être due à la mise en conformité du compilateur pour Visual C++ 2005 : les versions antérieures de Visual C++ autorisaient les spécialisations explicites pour un constructeur de copie ou un opérateur d'assignation de copie.

Pour remédier à l'erreur C2299, n'utilisez pas un constructeur de copie ou un opérateur d'assignation comme fonction de modèle, mais plutôt comme fonction sans modèle qui prend un type de classe. Tout code qui appelle le constructeur de copie ou l'opérateur d'assignation en spécifiant explicitement les arguments template doit supprimer ces derniers.

Pour plus d'informations, consultez Modifications avec rupture dans le compilateur Visual C++ 2005.

L'exemple suivant génère l'erreur C2299 :

// C2299.cpp
// compile with: /c
class C {
   template <class T>
   C (T t);

   template <> C (const C&);   // C2299
   C (const C&);   // OK
};