Konformitätsstatus moderner C++-Sprach-Features

Aus RAD Studio

Nach oben zu Modernes C++


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


Siehe auch