Partager via


Erreur du compilateur C2299

'function' : modification du comportement : une spécialisation explicite ne peut pas être un constructeur de copie ou un opérateur d’affectation de copie

Notes

Cette erreur peut également être générée suite au travail de conformité du compilateur effectué pour Visual Studio 2005. Les versions précédentes de Visual C++ autorisant des spécialisations explicites pour un constructeur de copie ou un opérateur d’affectation de copie.

Pour résoudre C2299, ne faites pas de constructeur de copie ou d’opérateur d’affectation un modèle de fonction. Faites-les fonctions non-modèle qui prennent un type de classe. Tout code qui appelle le constructeur de copie ou l’opérateur d’affectation en spécifiant explicitement les arguments de modèle doit supprimer les arguments du modèle.

Exemple

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
};