Übersicht über die wichtigsten Änderungen bei der Kompilierzeit
Aktualisiert: November 2007
In diesem Thema sind die Fehler und Warnungen zur Kompilierzeit zusammengefasst, die nun für Code ausgegeben werden, der vor Visual C++ 2003 ohne Fehler oder Warnungen kompiliert wurde. Einige auf die Konformität bezogene wichtige Änderungen zur Kompilierzeit wurden jedoch in Visual C++ 2005 eingeführt.
Für die definierte Präprozessordirektive (C2004) sind jetzt schließende Klammern erforderlich.
Fehlendes typename-Schlüsselwort und explizite Spezialisierungen suchen nicht mehr Vorlagenparameter aus der primären Vorlage (C2146).
Auf einen geschützten Member (n) kann nur über eine Memberfunktion einer Klasse (B) zugegriffen werden, die von der Klasse (A) erbt, der (n) als Member angehört (C2247).
Verbesserte Zugriffsprüfungen im Compiler erkennen jetzt Basisklassen, auf die kein Zugriff möglich ist (C2247).
Eine explizite Spezialisierung darf kein Kopierkonstruktor oder Kopierzuweisungsoperator sein (C2299).
Eine Ausnahme kann nicht aufgefangen werden, wenn auf den Destruktor und/oder den copy-Konstruktur nicht zugegriffen werden kann (C2316).
Standardargumente für Zeiger auf Funktionen sind nicht mehr zugelassen (C2383).
Ein statischer Datenmember darf nicht über eine abgeleitete Klasse initialisiert werden (C2477).
Die Initialisierung einer typedef ist gemäß Standard nicht zulässig und verursacht jetzt einen Compilerfehler (C2513).
bool ist jetzt ein richtiger Typ (C2632).
Ein UDC kann jetzt Mehrdeutigkeit mit überladenen Operatoren erstellen (C2666).
Eine Qualifikationskonvertierung und eine Identitätskonvertierung weichen voneinander ab (C2666).
Mehr Ausdrücke werden jetzt als gültige NULL-Zeiger-Konstanten angesehen (C2668).
template<> ist jetzt an Stellen erforderlich, wo der Compiler es vorher abgeleitet hat (C2768).
Die explizite Spezialisierung einer Memberfunktion außerhalb der Klasse ist ungültig, wenn die Funktion bereits über eine Vorlagenklassenspezialisierung explizit spezialisiert wurde (C2910).
Für jede explizite Spezialisierung müssen die Parameter der expliziten Spezialisierung ausgewählt werden, sodass diese mit den Parametern der primären Vorlage übereinstimmen (C2912).
Nichttyp-Vorlagenparameter mit Gleitkomma sind nicht mehr zulässig (C2993).
Klassenvorlagen dürfen nicht als Vorlagentypargumente verwendet werden (C3206).
Friend-Funktionsnamen werden nicht mehr im enthaltenden Namespace eingeführt (C3767).
Verbesserte Zeiger-zu-Member-Übereinstimmung (C3867).
Zusätzliche Kommas in Makros werden vom Compiler nicht mehr akzeptiert (C4002).
Ein Objekt des POD-Typs, das mit dem Initialisierer des Formulars () erstellt wurde, wird standardmäßig initialisiert (C4345).
typename ist jetzt erforderlich, wenn ein abhängiger Name als Typ behandelt werden soll (C4346).
Funktionen werden nicht mehr fälschlicherweise als Vorlagenspezialisierungen angesehen (C4347).
Statische Datenmember dürfen nicht über eine abgeleitete Klasse initialisiert werden (C4356).
Die Spezialisierung einer Klassenvorlage muss vor der Verwendung in einem Rückgabetyp definiert werden (C4686).
Der Compiler meldet jetzt nicht erreichbaren Code (C4702).
Eine friend-Deklaration, die eine neue, nicht auf einer Vorlage basierende Funktion deklariert, muss definiert werden (LNK2019).