C++26
Von cppreference.com
< cpp
Die nächste Generation des C++-Standards.
Der aktuelle IS-Zeitplan für C++26: P1000R6 (14.05.2024).
| Dieser Abschnitt ist unvollständig |
Inhalt |
[edit] Neue Sprachfeatures
[edit] Neue Bibliotheksfeatures
[edit] Neue Module
[edit] Neue Header
- <contracts>
- <debugging>
- <hazard_pointer>
- <hive>
- <inplace_vector>
- <linalg>
- <rcu>
- <simd>
- <text_encoding>
C-kompatible Header
[edit] Veraltete Features
[edit] Entfernte Features
| Dieser Abschnitt ist unvollständig |
[edit] Abgeschwächte Features
| Dieser Abschnitt ist unvollständig |
[edit] Fehlerberichte
[edit] Compiler-Unterstützung
Hauptartikel: C++26 Compiler-Unterstützung
[edit] C++26 Core-Sprachfeatures
| C++26 Feature |
Papier(e) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ehem. PGI)* |
Nvidia nvcc |
Cray |
|
|---|---|---|---|---|---|---|---|---|---|---|---|
| DR98: Entfernen von undefiniertem Verhalten aus dem Lexing | P2621R3 | Ja | 3.3 | 16.0.0* | |||||||
| DR98: Nicht kodierbare Stringliterale als fehlerhaft kennzeichnen | P1854R4 | 14 | 14 | 16.0.0* | |||||||
| Unevaluierte Strings | P2361R6 | 14 | 17 (partiell)* 18 |
16.0.0* | |||||||
Hinzufügen von @, $ und ` zum Basiszeichensatz |
P2558R2 | 15 | Ja | 16.0.0* | |||||||
| constexpr Cast von void* (FTM)* | P2738R1 | 14 | 17 | ||||||||
| DR20: Zur Ignorierbarkeit von Standardattributen | P2552R3 | 15 | Ja | ||||||||
| DR11: Statischer Speicher für braced initializers | P2752R3 | 14 | |||||||||
| Vom Benutzer erzeugte static_assert-Nachrichten (FTM)* | P2741R3 | 14 | 17 | ||||||||
| Platzhaltervariablen ohne Namen (FTM)* | P2169R4 | 14 | 18 | ||||||||
| Pack-Indizierung (FTM)* | P2662R3 | 15 | 19 | ||||||||
| Entfernen veralteter arithmetischer Konvertierungen bei Enumerationen | P2864R2 | 14 | 18 | ||||||||
| DR11/20: Template-Parameter-Initialisierung | P2308R1 | 9 | 18 | ||||||||
| Binden einer zurückgegebenen Referenz an ein Temporäres verbieten | P2748R5 | 14 | 19 | ||||||||
| Attribute für strukturierte Bindungen (FTM)* | P0609R3 | 15 | 19 | ||||||||
Fehlerhaftes Verhalten bei uninitialisierten Lesevorgängen, Attribut [[indeterminate]] |
P2795R5 | ||||||||||
| = delete("reason"); (FTM)* | P2573R2 | 15 | 19 | ||||||||
| Variadische friends (FTM)* | P2893R3 | 15 | 20 | ||||||||
| DR98: Klärung der Regeln für Brace-Elision in Aggregatinitialisierung | P3106R1 | Ja | 17 | ||||||||
| DR20: Moduldeklarationen dürfen keine Makros sein | P3034R1 | 15 | |||||||||
| DR11: Triviale Endlosschleifen sind kein undefiniertes Verhalten | P2809R3 | 14 | 19 | ||||||||
| constexpr Placement New (FTM)* (FTM)* | P2747R2 | 15 | 20 | ||||||||
| Strukturierte Bindungsdeklaration als Bedingung (FTM)* | P0963R3 | 15 | 6 (teilweise)* 21 |
||||||||
| Reihenfolge von Constraints, die Fold Expressions beinhalten (FTM)* | P2963R3 | 19 | |||||||||
| Löschen eines Zeigers auf einen unvollständigen Typ sollte fehlerhaft sein | P3144R2 | 15 | 19 | 6.7 | |||||||
| Strukturierte Bindungen können einen Pack einführen (FTM)* | P1061R10 | 21 | |||||||||
| constexpr strukturierte Bindungen und Referenzen auf constexpr Variablen | P2686R5 | 6.7 | |||||||||
| constexpr Ausnahmen (FTM)* | P3068R6 | ||||||||||
| Oxford Variadic Comma | P3176R1 | 15 | 20 | ||||||||
| Entfernen veralteter Array-Vergleiche | P2865R6 | 15 | |||||||||
#embed (FTM)* |
P1967R14 | 15 | 19* | ||||||||
| Concept- und Variable-Template-Template-Parameter (FTM)* | P2841R7 | ||||||||||
| Triviale Relokativereit (FTM)* | P2786R13 | ||||||||||
| Triviale Unions (FTM)* | P3074R7 | ||||||||||
| Beobachtbare Checkpoints | P1494R5 | ||||||||||
| Contracts (FTM)* | P2900R14 | ||||||||||
| C++26 Feature |
Papier(e) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ehem. PGI)* |
Nvidia nvcc |
Cray |
[edit] C++26 Bibliotheksfeatures
| C++26 Feature |
Papier(e) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
|
|---|---|---|---|---|---|---|
| Prüfung auf Erfolg oder Misserfolg der <charconv>-Funktionen (FTM)* | P2497R0 | 14 | 18 | 16.0.0* | ||
| std::text_encoding: Identifizierung von Textkodierungen (FTM)* | P1885R12 P2862R1 |
14 | ||||
| Arithmetische Überladungen von std::to_string und std::to_wstring verwenden std::format (FTM)* | P2587R3 | 14 | ||||
| Typprüfung von Formatargumenten (FTM)* | P2757R3 | 15 | ||||
| Formatierung von Zeigern (FTM)* | P2510R3 | 14* | 17* | 19.40** | ||
| Hashing-Unterstützung für std::chrono-Wertklassen (FTM)* | P2592R3 | |||||
| <rcu>: Read-Copy Update (FTM)* | P2545R4 | |||||
| <hazard_pointer>: Hazard Pointers (FTM)* | P2530R3 | |||||
| ADL-sicheres std::projected | P2538R1 | 14* | 18* | 19.38** | 16.0.0* | |
| constexpr stabiles Sortieren (FTM)* | P2562R1 | 21* | ||||
| Member std::basic_format_arg::visit() (FTM)* | P2637R3 | 15 | 19 | |||
| Member std::variant::visit() (FTM)* | P2637R3 | 15 | 18 | |||
| std::is_within_lifetime (FTM)* | P2641R4 | |||||
| Erweiterung assoziativer Container um die verbleibenden heterogenen Überladungen (FTM)* | P2363R5 | |||||
| Verwendung von std::weak_ptr als Schlüssel in ungeordneten assoziativen Containern ermöglichen (FTM)* | P1901R2 | |||||
| Native Handles in File Streams (FTM)* | P1759R6 | 14 | 18 | 16.0.0* | ||
| Schnittstellen von String Streams mit std::string_view (FTM)* | P2495R3 | 19 | ||||
| Schnittstelle von std::bitset mit std::string_view (FTM)* | P2697R1 | 18 | 16.0.0* | |||
| Mehr constexpr für <cmath> und <complex> (FTM)* (FTM)* | P1383R2 | 4.6 (teilweise)* | ||||
| Hinzufügen der neuen SI-Präfixe von 2022 zu Verhältnissen: std::quecto, std::ronto, std::ronna und std::quetta (FTM)* | P2734R0 | 14 | 17 | |||
| std::function_ref: Typ-erased aufrufbare Referenz (FTM)* | P0792R14 | |||||
| std::copyable_function (FTM)* | P2548R6 | |||||
| std::bind_front, std::bind_back und std::not_fn für NTTP-Aufrufbare (FTM)* (FTM)* (FTM)* | P2714R1 | |||||
| std::submdspan() (FTM)* | P2630R4 P3355R1 |
|||||
| Freestanding Language: Optional ::operator new | P2013R5 | N/A | ||||
| Freestanding std::char_traits, std::errc und Einrichtungen in: <charconv>, <cstdlib>, <cstring>, <cwchar> (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2338R4 | N/A | ||||
| Weitere freestanding Einrichtungen (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2198R7 | N/A | ||||
| Sättigungsarithmetik (FTM)* | P0543R3 | 14 | 18 | 16.0.0* | ||
| <debugging>: Debugging Support (FTM)* | P2546R5 P2810R4 |
|||||
| <linalg>: Eine freie Funktionsschnittstelle für lineare Algebra basierend auf BLAS (FTM)* | P1673R13 P3050R2 P3222R0 |
|||||
| Makro assert() benutzerfreundlicher gestalten | P2264R7 | |||||
| Laufzeitformatierungszeichenketten (FTM)* | P2918R2 | 14 | 18 | 16.0.0* | ||
| std::span über eine Initialisierungsliste (FTM)* | P2447R6 | 18 | 16.0.0* | |||
| std::span::at() (FTM)* | P2821R5 | 14 | 18 | 16.0.0* | ||
| Tuple-Protokoll zu std::complex hinzugefügt (FTM)* | P2819R2 | 19 | ||||
| Eine neue Spezifikation für std::generate_canonical | P0952R2 | 19.42* | ||||
| Entfernen des veralteten Typedefs std::allocator::is_always_equal | P2868R3 | 15 | 18 | 16.0.0* | ||
| Entfernen der Funktionsüberladung von std::basic_string::reserve(), die kein Argument annimmt | P2870R3 | 18 | 16.0.0* | |||
| Entfernen veralteter Unicode-Konvertierungsfacets (<codecvt>) | P2871R3 | 18 | 16.0.0* | |||
| Freestanding: Entfernen von std::strtok (FTM)* | P2937R0 | 14 | 19.40* | |||
| Freestanding Library: Teilklassen (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2407R5 | 14 | 19.42* | |||
| Freestanding Library: std::inout, std::expected, std::span (FTM)* (FTM)* (FTM)* (FTM)* | P2833R2 | 14 | 19.42* | |||
| DR23: std::basic_const_iterator sollte der Konvertierbarkeit des zugrundeliegenden Typs folgen (FTM)* | P2836R1 P2950R0 |
14 | 19.40* | |||
| DR20: std::make_format_args akzeptiert jetzt nur noch lvalue-Referenzen anstelle von Forwarding-Referenzen | P2905R2 | 14 | 18 | 19.40* | 16.0.0* | |
| DR20: Korrektur der Formatierung von Code-Einheiten als Ganzzahlen (FTM)* | P2909R4 | 13.3 | 18 | 19.40* | 16.0.0* | |
| views::concat (FTM)* | P2542R8 | 15 | ||||
| Verkettung von Strings und String Views (FTM)* | P2591R5 | 15 | 19 | |||
| Aktivierung der Listeninitialisierung für Algorithmen (FTM)* | P2248R8 P3217R0 |
15 | ||||
| std::ranges::generate_random (FTM)* | P1068R11 | |||||
| Vergleiche für std::reference_wrapper und Constraints für Vergleiche von std::pair, std::tuple, std::optional und std::variant (FTM)* (FTM)* | P2944R3 | 14 | 19 (teilweise)* | |||
| Gepufferte mdspan-Layouts (FTM)* | P2642R6 | |||||
| Neues CTAD für std::span und std::mdspan mit ganzzahligen Konstanten | P3029R1 | 19 | ||||
| Atomares Maximum und Minimum (FTM)* | P0493R5 | |||||
| std::formatter<std::filesystem::path> (FTM)* | P2845R8 | |||||
| Leere Zeilen mit std::println() drucken (FTM)* | P3142R0 | 14* | 19* | 19.41** | ||
| Undeprecate std::polymorphic_allocator::destroy | P2875R4 | 15 | 19.41* | |||
| Entfernen veralteter Strstreams | P2867R2 | 19 | ||||
| Entfernen veralteter atomarer APIs für std::shared_ptr | P2869R4 | |||||
| Entfernen von std::wstring_convert | P2872R3 | 19 | ||||
| DR23: Ermöglichen einer effizienten Implementierung von std::print (FTM)* | P3107R5 P3235R3 |
19.43* | ||||
| Bibliothek zur Steuerung der Ausführung (FTM)* | P2300R10 P3396R0 |
|||||
| std::inplace_vector: Dynamisch skalierbarer Vektor mit fester Kapazität (FTM)* | P0843R14 | |||||
| std::philox_engine: Zählerbasierter Zufallszahlengenerator (FTM)* | P2075R6 | |||||
| std::optional Range-Unterstützung (FTM)* | P3168R2 | |||||
| std::is_virtual_base_of: Typ-Trait zur Erkennung virtueller Basisklassen (FTM)* | P2985R0 | 15 | 20 | |||
| std::dims für std::mdspan (FTM)* | P2389R2 | 19 | ||||
| DR11: Formale Spezifikation des Typs von std::ignore | P2968R2 | 15 | 19 | 19.42* | ||
| DR20: Entfernen der Anforderung einer gemeinsamen Referenz von den indirekt aufrufbaren Konzepten (FTM)* | P2997R1 | 15 | 19 | 19.42* | ||
| Abwerten von std::is_trivial und std::is_trivial_v | P3247R2 | 15 | ||||
| DR20: Funktionsoperatoren für Algorithmen | P3136R1 | Ja | Ja | 19.39* | Ja | |
| std::ranges::cache_latest_view (FTM)* | P3138R5 | 15 | ||||
| Einschränken der Gleichheitsoperatoren von std::expected (FTM)* | P3379R0 | 15 | ||||
| std::aligned_accessor: Ein std::mdspan-Accessor, der Zeiger-Über-Ausrichtung ausdrückt (FTM)* | P2897R7 | |||||
| std::is_sufficiently_aligned: Prüft die Ausrichtungsvoraussetzung eines Zeigers (FTM)* | P2897R7 | |||||
| std::atomic_ref::address() (FTM)* | P2835R7 | |||||
| DR11/20: cv-qualifizierte Typen in std::atomic und std::atomic_ref | P3323R1 | 19.44* | ||||
| constexpr std::atomic und std::atomic_ref (FTM)* | P3309R3 | |||||
| constexpr für spezialisierte Speicher-Algorithmen (FTM)* | P3508R0 P3369R0 |
|||||
| <stdbit.h> und <stdckdint.h> | P3370R1 | |||||
| <simd>: Datenparallele Typen (FTM)* | P1928R15 P3430R3 P3441R2 P3287R3 P2663R7 P2933R4 |
|||||
| Ein Hilfsmittel zur Erstellung von Ausführungsumgebungen | P3325R5 | |||||
| constexpr für Ausnahmetypen, z.B. std::bad_alloc, std::bad_cast etc. (FTM)* | P3068R6 P3378R2 |
|||||
| Trait- und Operationen für triviale Relokation (FTM)* | P2786R13 | |||||
Defang und Deprecate std::memory_order::consume |
P3475R1 | |||||
| Lege std::monostate nach <utility> | P0472R3 | 15 | ||||
| std::indirect (FTM)* | P3019R14 | |||||
| std::polymorphic (FTM)* | P3019R14 | |||||
| Mehr constexpr Container und Adaptoren (FTM)* | P3372R2 | |||||
| constexpr std::inplace_vector für nicht-triviale Typen (FTM)* | P3074R7 | |||||
| std::ranges::to_input_view (FTM)* | P3137R3 | |||||
| std::ranges::approximately_sized_range und std::ranges::reserve_hint (FTM)* | P2846R6 | |||||
| <hive>: Ein Bucket-basierter Container, der Speicherorte von gelöschten Elementen wiederverwendet (FTM)* | P0447R28 | |||||
| <contracts>: Unterstützung für die Behandlung von Vertragsverletzungen (FTM)* | P2900R14 | |||||
| Standardbibliotheks-Härtung | P3471R4 | 19.44* (teilweise)* | ||||
| Freistehende Bibliothek: Algorithmen, Numerik und Zufall (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2976R1 | |||||
| DR20: Konvertieren von zusammenhängenden Iteratoren in Zeiger | P3349R0 | |||||
| C++26 Feature |
Papier(e) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
* - Bewegen Sie den Mauszeiger über eine Zelle, die mit dem Stern markiert ist *, um zusätzliche Pop-up-Hinweise zu sehen.
DRnn - die Nummer nn nach "DR" bezeichnet die Ziel-C++-Revision, auf die der Defect Report angewendet wird, z. B. DR20 → C++20.
[bearbeiten] Externe Links
| 1. | C++26 - Wikipedia |