Konformitätsstatus moderner C++-Sprach-Features
Nach oben zu Modernes C++
Inhaltsverzeichnis
Im folgenden finden Sie die modernen C++-Features, die von den RAD Studio-Compilern für C++ unterstützt werden.
C++2c-Features
Hinweis:
C++2c wird voraussichtlich zu C++26.Hinweis: BCC64X ist derzeit eine Vorschau. Der unten aufgeführte Status wird angestrebt, ist aber ungetestet und stellt keine Garantie für die endgültige Unterstützung dar. BCC64X verwendet C++17 als Standard-Sprachlevel, und es ist nicht geplant, dass das erste Release höhere Sprachlevel unterstützt. Führen Sie bcc64x mit
-std=c++2c aus, um für C++2c zu compilieren.| Feature | C++2c-Vorschlagsdokument | BCC32C/X | BCC64 | BCC64X |
|---|---|---|---|---|
| Undefiniertes Verhalten aus dem Lexing entfernen | P2621R2 | |||
| Nicht codierbare String-Literale als nicht wohlgeformt festlegen | P1854R4 | |||
| Nicht auswertbare Strings | P2361R6 | |||
| @, $ und ` zu dem grundlegenden Zeichensatz hinzufügen | P2558R2 | |||
| constexpr-Typumwandlung aus void* | P2738R1 | |||
| Zur Ignorierbarkeit von Standardattributen | P2552R3 | |||
| Statische Speicherung für Initialisierungen in geschweiften Klammern | P2752R3 | |||
| Vom Benutzer generierte static_assert-Meldungen | P2741R3 | |||
| Namenlose Platzhaltervariablen | P2169R4 |
C++23-Features
Hinweis: C+23 wird von der Clang-Version teilweise unterstützt, auf der BCC64X basiert und der C+-RTL und -STL (libc+), die es verwendet. Wir erwarten, dass alle Sprach-Features, die sowohl von Clang als auch von libc+ in den Versionen 15 und früher unterstützt werden, korrekt funktionieren. Aber sie werden nicht unterstützt, auch nicht auf dem nicht unterstützten Level einer Vorschau. Die Vorschau des BCC64X-Compilers zielt jedoch derzeit auf C+17 als Sprachstandard ab. Sie können mit
-std=c++23 die Ziel-Sprachkompatibilität ändern. C++20-Features
Hinweis: C+20 wird von der Clang-Version teilweise unterstützt, auf der BCC64X basiert und der C+-RTL und -STL (libc+), die es verwendet. Wir erwarten, dass alle Sprach-Features, die sowohl von Clang als auch von libc+ in den Versionen 15 und früher unterstützt werden, korrekt funktionieren. Aber sie werden nicht unterstützt, auch nicht auf dem nicht unterstützten Level einer Vorschau. Die Vorschau des BCC64X-Compilers zielt jedoch derzeit auf C+17 als Sprachstandard ab. Sie können mit
-std=c++20 die Ziel-Sprachkompatibilität ändern. C++17-Features
Hinweis: BCC64X ist derzeit eine Vorschau. Der unten aufgeführte Status wird angestrebt, stellt aber keine Garantie für das endgültige Release dar.
| Feature | C++17-Vorschlagsdokument | BCC32C/X | BCC64 | BCC64X |
|---|---|---|---|---|
| Neue auto-Regeln für direct-list-initialization | N3922 | |||
| static_assert ohne Meldung | N3928 | |||
| typename in einem template-Template-Parameter | N4051 | |||
| Entfernen von Trigraphs | N4086 | |||
| Verschachtelte Namespace-Definition | N4230 | |||
| Attribute für Namespaces und Aufzählungen | N4266 | |||
| u8-Zeichenliterale | N4267 | |||
| Konstantenauswertung für alle Argumente ohne Typ zulassen | N4268 | |||
| Fold-Ausdrücke | N4295 | |||
| Veraltete Verwendung des Schlüsselworts register entfernen | P0001R1 | |||
| Veraltetes operator++(bool) entfernen | P0002R1 | |||
| Entfernen veralteter Exception-Spezifikationen aus C++17 | P0003R5 | |||
| Exception-Spezifikationen in das Typsystem aufnehmen | P0012R1 | |||
| Aggregatinitialisierung von Klassen mit Basisklassen | P0017R1 | |||
| Lambda-Erfassung von *this | P0018R3 | |||
| Verwenden von Attribut-Namespaces ohne Wiederholung | P0028R4 | |||
| Dynamische Speicherzuweisung für über-ausgerichtete Daten | P0035R4 | |||
| Unäre fold-Ausrücke und leere Parameterpakete | P0036R0 | |||
| __has_include in Präprozessorbedingungen | P0061R1 | |||
| Template-Argumentableitung für Klassen-Templates | P0091R3 | |||
| Template-Parameter ohne Typ mit dem Typ "auto" | P0127R2 | |||
| Garantierte Kopierauslassung | P0135R1 | |||
| Neue Spezifikation für die Vererbung von Konstruktoren (DR1941 et al) | P0136R1 | |||
| Ersatz von Klassenobjekten, die Referenz-Member enthalten | P0137R1 | |||
| Direct-list-initialization von Aufzählungen | P0138R2 | |||
| Striktere Reihenfolge bei Ausdrucksauswertungen | P0145R3 | |||
| constexpr lambda-Ausdrücke | P0170R1 | |||
| Abweichende begin- und end-Typen im bereichsbasierten for | P0184R0 | |||
| Attribut [[fallthrough]] | P0188R1 | |||
| Attribut [[nodiscard]] | P0189R1 | |||
| Paketerweiterungen in using-Deklarationen | P0195R2 | |||
| Attribut [[maybe_unused]] | P0212R1 | |||
| Strukturierte Bindungen | P0217R3 | |||
| Hexadezimale Gleitkommaliterale | P0245R1 | |||
| Unbekannte Attribute ignorieren | P0283R2 | |||
| constexpr if-Anweisungen | P0292R2 | |||
| init-Anweisungen für if und switch | P0305R1 | |||
| Inline-Variablen | P0386R2 | |||
| DR: Abgleich von template-Template-Argumenten schließen kompatible Templates aus | P0522R0 | |||
| std::uncaught_exceptions() | N4259 | |||
| Verbessertes std::pair und std::tuple | N4387 | |||
| std::any | P0220R1 | |||
| std::variant | P0088R3 | |||
| std::optional | P0220R1 | |||
| std::shared_mutex (untimed) | N4508 | |||
| std::string_view | N3921 | |||
| Standardisierung des Parallelismus TS | P0024R2 | |||
| Elementare String-Konvertierungen | P0067R5 | |||
| Mathematische Sonderfunktionen | P0226R1 | |||
| Verbinden von Karten und Sets | P0083R3 | |||
| Hardware-Interferenzgröße | P0154R1 | |||
| std::filesystem | P0218R1 | |||
| std::byte | P0298R3 |
C++14-Features
| Feature | C++14-Vorschlagsdokument | BCC32C/X | BCC64 |
|---|---|---|---|
| Optimierte Formulierungen für kontextabhängige Konvertierungen | N3323 | ||
| Binäre Literale | N3472 | ||
| decltype(auto), Rückgabetypableitung für normale Funktionen | N3638 | ||
| Initialisierte/Generalisierte Lambda-Erfassung (init-capture) | N3648 | ||
| Generische (polymorphe) Lambda-Ausdrücke | N3649 | ||
| Variablen-Templates | N3651 | ||
| Erweitertes constexpr | N3652 | ||
| Member-Initialisierer und Aggregate (NSDMI) | N3653 | ||
| Klären der Speicherzuordnung (Zuweisungen verhindern/zusammenführen) | N3664 | ||
| Attribut [[deprecated]] | N3760 | ||
| Größenabhängige Freigabe | N3768 | ||
| Einfaches Anführungszeichen als Zifferntrenner | N3781 | ||
| std::result_of und SFINAE | N3462 | ||
| constexpr für <complex> | N3302 | ||
| constexpr für <chrono> | N3469 | ||
| constexpr für <array> | N3470 | ||
| constexpr für <initializer_list>, <utility> und <tuple> | N3471 | ||
| Verbessertes std::integral_constant | N3545 | ||
| Benutzerdefinierte Literale für <chrono> und <string> | N3642 | ||
| Null-Forward-Iteratoren | N3644 | ||
| std::quoted | N3654 | ||
| Heterogene assoziative Suche | N3657 | ||
| std::integer_sequence | N3658 | ||
| std::shared_timed_mutex | N3659 | ||
| std::exchange | N3668 | ||
| Festlegen der constexpr-Member-Funktionen ohne const | N3669 | ||
| std::get<T>() | N3670 | ||
| std::equal, std::is_permutation, std::mismatch im Dualbereich | N3671 |
C++11-Features
| Feature | C++11-Vorschlags- dokument |
BCC32C/X | BCC32 | BCC64 | ||
|---|---|---|---|---|---|---|
| R-Wert-Referenzen | N2118 | |||||
R-Wert-Referenzen für *this
|
N2439 | |||||
| Initialisierung von Klassenobjekten durch R-Werte | N1610 | |||||
| Initialisierung von nicht-statischen Daten-Membern | N2756 | |||||
| Variadische Templates | N2242 | |||||
| Erweitern von Template-Parametern variadischer Templates | N2555 | |||||
| Initialisierungslisten | N2672 | |||||
| Statische Assertions | N1720 | |||||
auto-typisierte Variablen
|
N1984 | |||||
Multi-Deklarator auto
|
N1737 | |||||
| Entfernen von "auto" als Speicherklassenspezifizierer | N2546 | |||||
|
Neue Funktionsdeklaratorsyntax |
N2541 | |||||
| Lambda-Ausdrücke | N2927 | |||||
| Deklarierter Typ eines Ausdrucks | N2343 | |||||
| Unvollständige Rückgabetypen | N3276 | |||||
| Rechte spitze Klammern | N1757 | |||||
| Template-Standardargumente für Funktions-Templates | DR226 | |||||
| Beheben des SFINAE-Problems bei Ausdrücken | DR339 | |||||
| Alias-Templates | N2258 | |||||
| Externe Templates | N1987 | |||||
| Nullzeigerkonstante | N2431 | |||||
| Streng typisierte Aufzählungen | N2347 | |||||
| Forward-Deklarationen von Enums | N2764 DR1206 |
|||||
| Standardisierte Attributsyntax | N2761 | |||||
| Generalisierte konstante Ausdrücke | N2235 | |||||
| Ausrichtungsunterstützung | N2341 | |||||
| Bedingtes Unterstützungsverhalten | N1627 | |||||
| Ändern undefinierten Verhaltens in diagnostizierbare Fehler | N1727 | |||||
| Delegierende Konstruktoren | N1986 | |||||
| Vererbung von Konstruktoren | N2540 | |||||
| Explizite Konvertierungsoperatoren | N2437 | |||||
| Neue Zeichentypen | N2249 | |||||
| Unicode-String-Literale | N2442 | |||||
| Roh-String-Literale | N2442 | |||||
| Universelle Zeichennamen in Literalen | N2170 | |||||
| Benutzerdefinierte Literale | N2765 | |||||
| Standard-Layout-Typen | N2342 | |||||
| Standardmäßig zu verwendende Funktionen | N2346 | |||||
| Gelöschte Funktionen | N2346 | |||||
| Erweiterte friend-Deklarationen | N1791 | |||||
Erweiterung von sizeof
|
N2253 DR850 |
|||||
| Inline-Namespaces | N2535 | |||||
| Uneingeschränkte Varianten | N2544 | |||||
| Lokale und unbenannte Typen als Template-Argumente | N2657 | |||||
| Bereichsbasiertes for | N2930 | |||||
| Explizite virtuelle Überschreibungen | N2928 N3206 N3272 |
|||||
| Minimale Unterstützung für Speicherbereinigung und erreichbarkeitsbasierte Leckerkennung | N2670 | |||||
| Auslösen von [noexcept] durch Verschiebekonstruktoren | N3050 | |||||
| Definieren spezieller Member-Funktionen für das Verschieben | N3053 | |||||
| Nebenläufigkeit | ||||||
| Sequenzpunkte | N2239 | |||||
| "Atomic"-Operationen | N2427 | |||||
| Starker Vergleich und Austausch | N2748 | |||||
| Bidirektionale Fences | N2752 | |||||
| Speichermodell | N2429 | |||||
| Datenabhängige Sortierung: "Atomics" und Speichermodell | N2664 | |||||
| Weitergeben von Exceptions | N2179 | |||||
| Zulassen von "Atomics" in Signalbehandlungsroutinen | N2547 | |||||
| Thread-lokaler Speicher | N2659 | |||||
| Dynamische Initialisierung und Freigabe bei Nebenläufigkeit | N2660 | |||||
| C99-Features in C++11 | ||||||
Vordefinierter Bezeichner __func__
|
N2340 | |||||
| C99-Präprozessor | N1653 | |||||
Typ long long
|
N1811 | |||||
| Erweiterte integrale Typen | N1988 | |||||