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++17-Features
| Feature | C++17-Vorschlagsdokument | BCC32C/X | BCC64 |
|---|---|---|---|
| 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 | BCCOSX | BCCIOSARM | BCCIOSARM64 | BCCAARM |
|---|---|---|---|---|---|---|---|---|
| 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 | |||||||