Récapitulatif des modifications avec rupture au moment de la compilation
Mise à jour : novembre 2007
Cette rubrique résume les erreurs et avertissements survenus au moment de la compilation qui seront maintenant émis sur le code qui compilait sans erreur ou avertissement avant Visual C++ 2003. Toutefois, certaines modifications avec rupture au moment de la compilation relatives à la conformité, de compilation ont été introduites dans Visual C++ 2005.
La fermeture des parenthèses est désormais requise pour la directive de préprocesseur définie (C2004).
Un mot clé typename manquant et des spécialisations explicites ne trouvent plus de paramètres de modèle dans le modèle principal (C2146 ).
Un membre protégé (n) est uniquement accessible par l'intermédiaire d'une fonction membre d'une classe (B) qui hérite de la classe (A) dont il est (n) membre C2247).
Les vérifications de l'accessibilité améliorées dans le compilateur détectent désormais les classes de base inaccessibles (C2247).
Une spécialisation explicite ne peut pas être un constructeur de copie ou un opérateur d'assignation de copie C2299).
Une exception ne peut pas être intercepté si le destructeur et/ou le constructeur de copie est inaccessible (C2316).
Les arguments par défaut pour les pointeurs fonction ne sont plus autorisés (C2383).
Les données membres static ne peuvent pas être initialisées via une classe dérivée (C2477).
L'initialisation d'un typedef n'est pas autorisée par la norme et génère désormais une erreur du compilateur (C2513)..
bool est désormais un type propre (C2632).
Une conversion définie par l'utilisateur (UDC) peut maintenant créer une ambiguïté avec les opérateurs surchargés (C2666).
Une conversion de qualification n'est pas identique à une conversion d'identité (C2666).
Plus d'expressions sont maintenant considérées comme constantes pointeur null valides (C2668).
template<> est désormais requis là où le compilateur l'aurait précédemment déduit (C2768).
La spécialisation explicite d'une fonction membre à l'extérieur de la classe n'est pas valide si la fonction a déjà été spécialisée explicitement via une spécialisation de classe de modèle. (C2910).
Pour chaque spécialisation explicite, vous devez choisir les paramètres de toutes les spécialisations explicites, de sorte qu'elles correspondent aux paramètres du modèle principal (C2912).
Les paramètres de modèle sans type à virgule flottante ne sont plus autorisés (C2993).
Les modèles de classe ne sont pas autorisés comme arguments de type de modèle (C3206).
Les noms de fonction friend ne sont plus introduits dans l'espace de noms conteneur (C3767).
Conformité pointeur vers membre améliorée (C3867).
Le compilateur n'accepte plus les virgules superflues dans une macro (C4002).
Un objet de type POD construit avec un initialiseur de la forme () sera initialisé par défaut (C4345).
typename est désormais requis si un nom dépendant doit être traité comme un type (C4346).
Les fonctions incorrectement considérées auparavant comme spécialisations de modèle ne le sont plus (C4347).
Les données membres statiques ne peuvent pas être initialisées via une classe dérivée (C4356).
Une spécialisation de modèle de classe doit être définie avant d'être utilisée dans un type de retour (C4686).
Le compilateur signale désormais un code inaccessible (C4702).
Une déclaration friend qui déclare une nouvelle fonction sans modèle doit être définie (LNK2019).