Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In jeder Version von Microsoft C++-Buildtools (MSVC) werden Konformitätsverbesserungen und Fehlerbehebungen vorgenommen. Ab Visual Studio 2026 Version 18.0 ordnen wir größere Verbesserungen nach der Versionsnummer der MSVC Build Tools. Verwenden Sie oben in diesem Artikel die Links unter In diesem Artikel, um direkt zu den Änderungen für eine bestimmte Version zu springen.
Für Änderungen in früheren Versionen von Visual Studio:
| Version | Link "Konformitätsverbesserungen" |
|---|---|
| 2022 | Verbesserungen der C++-Konformität in Visual Studio 2022 |
| 2019 | Verbesserungen der C++-Konformität in Visual Studio 2019 |
| 2017 | Verbesserungen der C++-Konformität in Visual Studio 2017 |
| 2003-2015 | Visual C++ – Neuerungen 2003 bis 2015 |
C++-Konformitätsverbesserungen, Verhaltensänderungen und Fehlerbehebungen in MSVC Build Tools v14.51
MSVC Build Tools v14.51 setzt den Fortschritt bei der C++23-Konformität mit mehreren wichtigen Sprachfeatureimplementierungen und zahlreichen CWG-Problemauflösungen (Core Working Group) fort. Diese Version konzentriert sich auf Verbesserungen der Kompilierungszeitauswertung, Unicode-Unterstützungsverbesserungen und verfeinerte consteval Behandlung.
Diese Version wurde zuerst mit Visual Studio 2026 Version 18.6 ausgeliefert und enthält Version 19.51 des MSVC-Compilers.
Zu den wichtigsten Highlights dieser Version gehören:
- Statische
constexprVariablen inconstexprFunktionen (P2647R1) - Lockere
constexprEinschränkungen (P2448R2) - Verbesserungen der Unicode-Unterstützung (P2029R4, P2071R2, P2314R4)
- Verbesserte
constevalFunktionsbehandlung mit standardmäßig aktivierten experimentellen Features - Neue Standardbibliotheksheader
<flat_map>und<flat_set>
Weitere Informationen zu Bibliotheksfeatures und anderen Updates finden Sie unter C++23-Unterstützung in MSVC Build Tools 14.51 und STL Changelog.
P2647R1: Statische Constexpr-Variablen in constexpr-Funktionen
P2647R1 ermöglicht es statischen lokalen Variablen, innerhalb constexpr von Funktionen deklariert constexpr zu werden, wodurch die Reibung beim Markieren vorhandener Funktionen als constexprreduziert wird.
constexpr char xdigit(int n)
{
static constexpr char digits[] = "0123456789abcdef";
return digits[n];
}
Dieses Feature verbessert sowohl die Auswertung der Kompilierungszeit als auch die Laufzeitoptimierung. Zuvor konnten statische lokale Variablen nicht markiert constexprwerden, wodurch es schwierig war, Nachschlagetabellen innerhalb von constexpr Funktionen zu deklarieren. Jetzt kann der Compiler diese Funktionen zur Kompilierungszeit nach Möglichkeit auswerten und gleichzeitig optimierten Laufzeitcode generieren, der direkt auf den statischen Speicher zugreift.
Weitere C++23-Features
Weitere in dieser Version implementierte C++23-Features umfassen Unicode-Unterstützungsverbesserungen, Bezeichnungen am Ende der Verbundanweisungen für C-Kompatibilität, Klassenvorlagenargumentabzug (CTAD) von geerbten Konstruktoren und aussagekräftige Exporte für Module. Weitere Informationen und zugehörige CWG-Problemauflösungen (Core Working Group) finden Sie unter der C++23-Unterstützung in MSVC Build Tools 14.51.
Standardbibliothek
MSVC Build Tools v14.51 fügt neue Standardbibliotheksfeatures hinzu, darunter:
-
<flat_map>und<flat_set>Kopfzeilen - Typeigenschaften für die Erkennung von Verweisen, die an Temporärdateien gebunden werden (P2255R2)
- Explizite Lebensdauerverwaltung (P2590R2) und
is_implicit_lifetime(P2674R1). - Grundlegende Überarbeitung
<regex>, SIMD-vektorisierte STL-Algorithmen unter Verwendung von NEON für ARM64/ARM64EC und Lösungen für 18 Probleme der Library Working Group (LWG). Die vollständige Liste finden Sie im STL-Änderungsprotokoll.
C++-Konformitätsverbesserungen, Verhaltensänderungen und Fehlerbehebungen in MSVC Build Tools v14.50
MSVC Build Tools v14.50 führt Verbesserungen an der MSVC-Compiler- und Standardbibliothek ein, einschließlich besserer C++23-Standardskonformität, verbesserter Zuverlässigkeit und verbesserter Korrektheit. Diese Version enthält auch zahlreiche Bugfixes und Updates, die von der C++-Entwicklung im großen Maßstab profitieren.
Diese Version wurde zuerst mit Visual Studio 2026, Version 18.0, ausgeliefert und enthält Version 19.50 des MSVC-Compilers.
Zu den wichtigsten Highlights dieser Version gehören:
- Erweiterte C++23-Featureunterstützung, einschließlich
auto(x)Decay-Copy und#warningAnweisung. - Umfassende
constexprVerbesserungen, insbesondere für virtuelle Funktionen. - Wichtige Stabilitätsverbesserungen für C++-Module.
- Umfangreiche Zuverlässigkeitskorrekturen zur Verringerung interner Compilerfehler.
- Erweiterte C++/CLI-Unterstützung für Szenarien mit verwaltetem Code.
- Die Microsoft C++-Standardbibliothek (MSVC STL) unterstützt nicht mehr die Zielbestimmung von Windows 7/Server 2008 R2, Windows 8/Server 2012 oder Windows 8.1/Server 2012 R2.
- Windows 10/Server 2016 sind die mindestens unterstützten Betriebssysteme.
Weitere Informationen zu Leistungsverbesserungen, Fehlerbehebungen und Konformitätsupdates in der Standardbibliothek finden Sie unter STL Changelog, das regelmäßig aktualisiert wird.
C++23-Funktionen
MSVC Build Tools v14.50 fügt Unterstützung für mehrere C++23-Features hinzu und bringt den Compiler näher an die vollständige C++23-Konformität.
P0849R8: auto(x) - Verfallskopie in der Sprache
P0849R8 führt die auto(x) Syntax für Verfallskopievorgänge direkt in der Sprache ein und bietet eine knappere Möglichkeit, Verfallskopiesemantik auszudrücken.
Vor P0849R8 mussten Sie explizit Verfallsvorgänge ausführen:
// Before P0849R8:
void pop_front_alike(auto& x)
{
using T = std::decay_t<decltype(x.front())>;
std::erase(x, T(x.front()));
}
Nach P0849R8 können Sie die einfachere auto(x) Syntax verwenden:
// After P0849R8:
void pop_front_alike(auto& x)
{
std::erase(x, auto(x.front()));
}
Dieses Feature bietet eine standardisierte Möglichkeit zum Ausführen von Verfallskopienvorgängen, wodurch Code besser lesbar ist und die Notwendigkeit ausführlicher Vorlagenmetaprogrammierung reduziert wird.
P2437R1: C++23-Direktive #warning
P2437R1 implementiert die C++23-Präprozessordirektive #warning und bietet eine Standardmethode zum Ausgeben von Warnungen während der Kompilierung.
// Valid before C++23.
#error bad configuration...
// Valid after C++23.
#warning configuration deprecated...
Mit der #warning-Direktive können Sie Diagnosemeldungen ausgeben, ohne die Kompilierung zu beenden, wodurch sie für Verwendungshinweise zu veralteten Funktionen und Konfigurationswarnungen nützlich ist. Weitere Informationen finden Sie unter #warning Direktive (C/C++).
CWG-Problem 2586: Expliziter Objektparameter für Zuordnung und Vergleich
CWG Issue 2586 ermöglicht explizite Objektparameter in Zuordnungs- und Vergleichsoperatoren, wodurch flexiblere Operatordefinitionen ermöglicht werden.
struct S
{
S& operator=(this S&, const S&) = default; // Valid after CWG2586.
auto operator<=>(this const S&, const S&) = default; // Valid after CWG2586.
};
Mit dieser Änderung können Sie die explizite Objektparametersyntax (this ableitend) in Zuordnungs- und Vergleichsoperatoren verwenden, wodurch eine konsistentere Syntax über verschiedene Typen von Memberfunktionen gewährleistet wird.
P2266R1: Einfachere implizite Verschiebung
Die Einführung von P2266R1 kann dazu führen, dass Code, der zuvor als lvalue behandelt wurde, als xvalue oder prvalue behandelt wurde. Beispiel:
#include <utility>
template<typename T>
T& f(T&& t)
{
return t;
}
struct S { };
void g()
{
S s1{ };
S& s2 = f(std::move(s1));
}
In C++20 und früheren Versionen wurde dieser Code kompiliert, da der Typ von tS&& ist und die Verwendung von t in return t als glvalue behandelt wird, wodurch eine Bindung an den Rückgabetyp möglich ist.
Bei C++23 t wird als X-Wert behandelt und kann daher nicht an einen Lvalue-Verweis gebunden werden.
Ein Fix besteht darin, den Rückgabetyp der Funktion von T& zu T&& ändern, dies kann sich jedoch auf Code auswirken, der diese Funktion aufruft. Eine Alternative besteht darin, das Featuretestmakro zu verwenden, das dieser Änderung zugeordnet ist. Beispiel:
#include <type_traits>
template<typename T>
T& f(T&& t)
{
#if defined(__cpp_implicit_move)
return static_cast<std::remove_reference_t<T>&>(t);
#else
return t;
#endif
}
Das Hinzufügen des Casts bedeutet, dass die Wertkategorie des Rückgabeausdrucks jetzt ein lvalue ist und daher an den Rückgabetyp gebunden werden kann.
P2280R4: Verweise auf unbekannte Werte während der konstanten Auswertung
P2280R4 ermöglicht Bezüge auf unbekannte Werte während der konstanten Auswertung, entspannt Einschränkungen der constexpr Auswertung.
template <typename T, size_t N>
constexpr size_t array_size(T (&)[N])
{
return N;
}
void check(int const (¶m)[3])
{
constexpr auto s2 = array_size(param); // Previously ill-formed, now accepted as a constant expression after P2280R4.
}
Durch diese Verbesserung können mehr Code zur Kompilierungszeit ausgewertet werden, insbesondere beim Umgang mit Funktionsparametern in Vorlagenkontexten.
Konformitätsverbesserungen
Eine verbesserte Einhaltung von C++-Standards umfasst eine bessere Behandlung von Attributen, Vorlagen und C++20/C++23-Features.
Attributunterstützung
- Unterstützung für
[[maybe_unused]]auf Bezeichnungen hinzugefügt. - Warnung C4102 (nicht referenziertes Label) wurde behoben, wenn der einzige Verweis aus einem verworfenen
if constexprZweig stammte.
Korrekturen an Vorlagen und Spezialisierungen
- Diagnostizierte fehlerhaft gestaltete explizite Friend-Spezialisierungen, die fälschlicherweise ab C++20 akzeptiert wurden.
- Schalter zum
/Zc:enumEncodinghinzugefügt. - Es wurden Probleme bei der Diagnose fehlender 'template'-Schlüsselwörter behoben.
C++20- und C++23-Features
- Erweiterte mehrdimensionale
operator[]Unterstützung - Verbesserte Konzept- und Einschränkungsbewertung
Kleinere Konformitätsupdates
MSVC Build Tools v14.50 enthält zahlreiche kleinere Konformitätsverbesserungen, die die C++-Standardcompliance verbessern:
- CWG2635: Unterstützung eingeschränkter strukturierter Bindungen
- CWG2465: Verbesserungen beim Übergeben von Coroutine-Parametern an den Promise-Konstruktor
- CWG2496: Ref-Qualifizierer und virtuelle Überschreibkorrekturen
- CWG2506: Korrekturen für strukturierte Bindungen und Array-Cv-Qualifizierer
-
CWG2507: Standardargumente zur
operator[]Unterstützung - CWG2585: Verhaltensübereinstimmung mit Standardanforderungen
- CWG2521: Veraltet des Operatorbezeichners "string-literal identifier"
- CWG2528: Entspannte Konvertierungsregeln für den Raumschiffsoperator
- P2360R0: Erweiterte Init-Anweisungsdefinition, um Aliasdeklarationen zuzulassen
- P2290R3: C++23 Unterstützung von hexadezimalen/oktalischen Escapesequenzen in Zeichenfolgenliteralen
- P2797R0: Klärung von CWG2692 in Bezug auf statische und explizite Objektmemberfunktionen mit denselben Parametertypenlisten
- P2266R3: Einfachere implizite Bewegungssemantik
Fehlerkorrekturen
Fehlerkorrekturen für C++-Module constexprund andere Fixes wurden in MSVC Build Tools v14.50 vorgenommen.
Eine detaillierte Liste der Fehlerbehebungen finden Sie unter Compilerverbesserungen in v14.50.
Codierung bestimmter nicht typfremder Vorlagenargumente korrigiert
/std:c++20 oder spätere Versionen betroffen.
Bestimmte Nichttype-Template-Argumente für Zeigertypen, die Unterobjekte enthalten, könnten zu Verknüpfungsproblemen oder in einigen Fällen zu einer unerkannt fehlerhaften Codegenerierung führen, bei denen eigentlich unterschiedliche Spezialisierungen ungewollt kollidieren.
struct A
{
int x;
};
struct B
{
int y;
};
template <auto p> void f();
int main()
{
static A a;
static B b;
constexpr auto px = &a.x;
constexpr auto py = &b.y;
f<px>(); // incorrect encoding of argument 'px'
f<py>(); // incorrect encoding of argument 'py', collided with 'px'.
}
Mit diesem Fix erhalten die beiden Aufrufe, wie erforderlich, unterschiedliche Codierungen für f .
Migrieren zu MSVC Build Tools v14.50
Berücksichtigen Sie beim Upgrade auf MSVC Build Tools v14.50 die folgenden potenziellen Änderungen und Migrationsanleitungen:
C++23-Featureakzeptanz
- Aktualisieren Sie den Code, um die Vorteile der neuen
auto(x)Decay-Copy-Syntax für einen saubereren Template-Code zu nutzen. - Erwägen Sie die Verwendung von
#warning-Direktiven für Abkündigungshinweise anstelle der fehleranfälligen bedingten Kompilierung. - Überprüfen der expliziten Objektparameterverwendung in Operatoren auf verbesserte Konsistenz
constexpr Verbesserungen
- Vorhandener
constexprCode kann jetzt kompilieren, der zuvor fehlgeschlagen ist, insbesondere bei virtuellen Funktionen - Überprüfen des konstanten Auswertungscodes für potenzielle neue Optimierungsmöglichkeiten
- Aktualisieren von CRTP-Mustern, die jetzt ordnungsgemäß mit statischen constexpr-Mitgliedsvariablen funktionieren.
Modulmigration
- Projekte mit C++20-Modulen sollten verbesserte Stabilität und Kompatibilität sehen
- Kopfzeileneinheiten funktionieren jetzt zuverlässiger mit großen Codebasen wie Unreal Engine 5
- Erwägen Sie die Migration von herkömmlichen Headern zu Modulen, um eine bessere Kompilierungsleistung zu erzielen.
Compilerdiagnostik
- Bei zuvor nicht diagnostizierten Problemen können neue Warnungen angezeigt werden.
- Überprüfen Sie die Verwendung des Enum-Typs bei Nutzung von
/Zc:enumTypes. - Aktualisieren von Code, der auf impliziten Konvertierungen basiert, die jetzt gekennzeichnet werden können
C-Codeaktualisierungen
- C23-Features sind mit
/std:clatestverfügbar -
typeofVerhaltensänderungen können sich auf vorhandenen Code auswirken - Überprüfen Sie die Vorprozessorverwendung für die neue
__VA_OPT__-Verfügbarkeit.
Feedback geben
Um die neuesten Updates zu erhalten und Feedback zu geben, besuchen Sie die Visual Studio Entwicklercommunity , oder wenden Sie sich an das Team unter visualcpp@microsoft.com. Folgen Sie uns auf X @visualc oder BlueSky @msftcpp.bsky.social.
Wenn Probleme mit MSVC in Visual Studio 2026 auftreten, teilen Sie uns dies bitte über die Option " Problem melden " mit, entweder aus dem Installationsprogramm oder der Visual Studio-IDE selbst.
Siehe auch
Microsoft C/C++-Sprachkonformität
What's new für C++ in Visual Studio
Verbesserungen der C++-Konformität in Visual Studio 2022