Namensräume
Varianten
Aktionen

Compiler-Unterstützung für C++23

Von cppreference.com

* - 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] C++23 Kernsprach-Features

C++23 Feature

 
Papier(e)

 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ehem. PGI)*
Nvidia nvcc
Cray
Literal-Suffix für (vorzeichenbehaftete) size_t  (FTM)* P0330R8 11 13 19.43* 13.1.6* 6.5 2022.2 23.9
Mache () optionaler für Lambdas P1102R2 11 13 19.44* 13.1.6* 6.3 2022.2 22.5
if consteval  (FTM)* P1938R3 12 14 19.44* 14.0.0* 6.3 2022.2 24.1
Entfernung der Garbage-Collection-Unterstützung P2186R2 12 N/A 19.30* N/A N/A
Verengung kontextbezogener Konvertierungen in static_assert und constexpr if P1401R5 9 13 (partiell)*
14
14.0.0* 2022.2 20.7
Trimmen von Whitespaces vor Zeilensprüngen P2223R2 Ja Ja Ja 6.7 2022.2 Ja
Festlegen der Deklarationsreihenfolge als verpflichtend P1847R4 Ja Ja Ja Ja 2022.2 Ja
Entfernung der Verkettung gemischter Wide-String-Literale Verkettung P2201R1 Ja Ja Ja Ja Ja Ja Ja
Explizite Objektmemberfunktionen (ableiten von this)  (FTM)* P0847R7 14 18
19*
19.32*
(teilweise)*
19.43*
6.3 22.5
auto(x) und auto{x}  (FTM)* P0849R8 12 15 14.0.3* 6.4 2022.2 23.3
#elifdef und #elifndef P2334R1 12 13 19.40* 13.1.6* 6.5 2022.2 23.9
Nicht-Literal-Variablen (und Labels und gotos) in constexpr-Funktionen  (FTM)* P2242R3 12 15 19.43* 14.0.3* 6.3 2022.2 22.5
Konsistente Zeichenkodierung P2316R2 Ja Ja 19.30* Ja Ja 2022.2 Ja
Zeichensätze und Kodierungen P2314R4 10 Ja Ja Ja 2022.2 Ja
Erweiterung von init-statement (des for-Loops) um Alias-Deklarationen zu erlauben P2360R0 12 14 14.0.0* 2022.2
Mehrdimensionaler Subscript-Operator  (FTM)* P2128R6 12 15 19.42* 14.0.3* 2022.2
Attribute für Lambdas P2173R1 9 13 19.44* 13.1.6* 6.6 2022.2 22.5
#warning P2437R1 Ja* Ja 15.0.0* 6.5 2023.2 Ja
Entfernung von nicht kodierbaren Wide-Zeichenliteralen und Multizeichen-Wide-Zeichenliteralen P2362R3 13 14 15.0.0* 6.7 2023.2
Labels am Ende von zusammengesetzten Anweisungen P2324R2 13 16 16.0.0* 6.5 2023.2 23.9
Begrenzte Escape-Sequenzen P2290R3 13 15 15.0.0* 6.7 2023.2
Benannte universelle Zeichen-Escape-Sequenzen  (FTM)* P2071R2 13 15 15.0.0* 6.7 2023.2
Lockerung einiger constexpr-Beschränkungen  (FTM)* P2448R2 13 17 (teilweise)
19
2024.0 (teilweise)
Einfacheres implizites Verschieben  (FTM)* P2266R3 13 13 6.7 2022.2
static operator()  (FTM)* P1169R4 13 16 19.44* 16.0.0* 6.7 2023.2
Anforderungen an optionale erweiterte Gleitkomma-Typen P1467R9 13 N/A 6.4
Klassen-Template-Argument-Deduktion aus geerbten Konstruktoren P2582R1 14
Attribut [[assume]] P1774R8 13 19
Unterstützung für UTF-8 als portable Quellcodedatei-Kodierung P2295R6 13* 15* 19.0 (Update 2)** 15.0.0* 2023.2
static operator[]  (FTM)* P2589R1 13 16 19.44* 16.0.0* 6.7 2023.2
Zulassen von static constexpr Variablen in constexpr-Funktionen  (FTM)* P2647R1 13 16 16.0.0* 2023.2
Erweiterung der Lebensdauer von Temporär-Objekten im Initialisierer von Range-basierten for-Loops  (FTM)* P2644R1
P2718R0
CWG2659
15 19
DR11: Änderung des Gültigkeitsbereichs des Trailing-Return-Typs von Lambdas P2036R3
P2579R0
17 2023.2
DR20: Sinnvolle Exporte P2615R1 15 17 (teilweise)
DR20: consteval muss nach oben propagiert werden  (FTM)* P2564R3 14 17 16.0.0* 6.7 2024.0
DR98: C++-Bezeichnersyntax unter Verwendung von Unicode Standard Annex 31 P1949R7 12 14 14.0.0* 6.4 2022.2
DR11: Doppelte Attribute zulassen P2156R1 11 13 13.1.6* 6.5 23.9
DR20: Anpassung des Werts des Feature-Test-Makros __cpp_concepts P2493R0 12 19.32* 6.4 23.3
DR98: Anforderungen an wchar_t lockern, um bestehende Praktiken anzupassen P2460R2 Ja Ja Ja 15.0.0* N/A 2023.2
DR11: Verwendung unbekannter Zeiger und Referenzen in konstanten Ausdrücken P2280R4 14 20*
DR20: Der Gleichheitsoperator, den Sie suchen P2468R2 13 16 16.0.0* 2023.2
DR20: char8_t Kompatibilitäts- und Portabilitätskorrektur  (FTM)* P2513R4 13 16 19.34* 16.0.0* 2023.2
DR98/11: Klarstellung der Meldung von Diagnose-Direktiven und Zulassung von static_assert nicht-wertabhängiger Ausdrücke im Template-Kontext CWG2518 13 17 16.0*
(teilweise)*
19.40*
 

C++23 Feature
 

Papier(e)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ehem. PGI)*
Nvidia nvcc
Cray

[bearbeiten] C++23 Bibliotheks-Features

C++23 Feature

 
Papier(e)

 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
Stacktrace-Bibliothek  (FTM)* P0881R7
P2301R1
12 (teilweise)*
14*
19.34*
<stdatomic.h>  (FTM)* P0943R6 12 15 19.31* 14.0.3*
std::is_scoped_enum  (FTM)* P1048R1 11 12 19.30* 13.0.0*
std::basic_string::contains(), std::basic_string_view::contains()  (FTM)* P1679R3 11 12 19.30* 13.0.0*
std::to_underlying  (FTM)* P1682R3 11 13 19.30* 13.1.6*
Lockerung der Anforderungen für time_point<>::clock P2212R2 N/A N/A N/A N/A
Bereitstellung von Größenrückmeldung in der Allocator-Schnittstelle  (Bereitstellung von Größenrückmeldung)  (FTM)* P0401R6 15 19.30* 14.0.3*
<spanstream>: String-Stream mit std::span-basiertem Puffer  (FTM)* P0448R4 12 19.31*
std::out_ptr(), std::inout_ptr()  (FTM)* P1132R8 14 19 19.30*
constexpr type_info::operator==()  (FTM)* P1328R1 12 17 19.33**
19.34*
15.0.0*
Iterator-Paar-Konstruktoren für std::stack und std::queue  (FTM)* P1425R4 12 14 19.31* 14.0.3*
Nicht-Deduktionskontext für Allocators in Container-Deductionsführern P1518R2 12* 13* 19.31** 13.1.6**
ranges::starts_with() und ranges::ends_with()  (FTM)* P1659R3 17 (partiell)*
18
19.31* 16.0.0*
Konstruktion von std::basic_string und std::basic_string_view aus nullptr verbieten P2166R1 12 13 19.30* 13.1.6*
std::invoke_r()  (FTM)* P2136R3 12 17 19.31* 15.0.0*
Range-Konstruktor für std::basic_string_view P1989R2 11 14 19.30* 14.0.3*
Standard-Template-Argumente für den Forwarding-Konstruktor von std::pair P1951R1 14 14 19.30* 14.0.3*
Entfernung von Garbage Collection und reichweitenbasierter Leckerkennung (Bibliotheksunterstützung) P2186R2 12 14 19.30* 14.0.3*
zip: views::zip, views::zip_transform, views::adjacent und views::adjacent_transform  (FTM)* P2321R2 13 15 (teilweise)* 19.33*(teilweise)***
19.37*
14.0.3*
Heterogene Löschüberladungen für assoziative Container  (FTM)* P2077R3 19.32*
std::byteswap()  (FTM)* P1272R4 12 14 19.31* 14.0.3*
Drucken von volatile T* P1147R1 11.3 14 19.31* 14.0.3*
basic_string::resize_and_overwrite()  (FTM)* P1072R10 12 14 19.31* 14.0.3*
Monadische Operationen für std::optional  (FTM)* P0798R8 12 14 19.32* 14.0.3*
std::move_only_function  (FTM)* P0288R9 12 19.32*
Bedingte noexcept-Spezifikation zu std::exchange hinzufügen P2401R0 12 14 19.25* 14.0.3*
std::span & std::basic_string_view müssen TriviallyCopyable sein P2251R1 Ja Ja Ja Ja
Klärung des Status der „C-Header“ P2340R1 Ja Ja Ja Ja
<expected>  (FTM)* P0323R12
P2549R1
12 16 19.33* 15.0.0*
constexpr für <cmath> und <cstdlib>  (FTM)* P0533R9 4.6 (teilweise)*
std::unreachable()  (FTM)* P0627R6 12 15 19.32* 14.0.3*
Vorschlag zur Verlegung von std::aligned_storage und std::aligned_union P1413R3 13 16 19.33*
std::reference_constructs_from_temporary & std::reference_converts_from_temporary  (FTM)* P2255R2 13 (partiell)*
14
19
constexpr std::unique_ptr  (FTM)* P2273R3 12 16 19.33* 15.0.0*
Konstruktion von Containern und Strings aus Ranges mit ranges::to(), getaggten Konstruktoren, Einfüge- und Zuweisungs-Memberfunktionen  (FTM)*  (FTM)* P1206R7 14 (partiell)* 17 19.34* 15.0.0*
Pipe-Unterstützung für benutzerdefinierte Range-Adapter (ranges::range_adaptor_closure, std::bind_back)  (FTM)*  (FTM)* P2387R3 13 (partiell)*
14
19 19.34*
ranges::iota(), ranges::shift_left() und ranges::shift_right()  (FTM)*  (FTM)* P2440R1 13 (partiell)* 19.34*
views::join_with  (FTM)* P2441R2 13 19.34*
views::chunk und views::slide  (FTM)*  (FTM)* P2442R1 13 19.33*
views::chunk_by  (FTM)* P2443R1 13 18 19.33* 16.0.0*
std::mdspan: eine nicht-besitzende mehrdimensionale Array-Referenz  (FTM)* P0009R18
P2599R2
P2604R0
P2613R1
P2763R1
17 (partiell)*
18
19.39* 15.0.0*
<flat_map>  (FTM)* P0429R9 15 20
<flat_set>  (FTM)* P1222R4 15
ranges::find_last(), ranges::find_last_if() und ranges::find_last_if_not()  (FTM)* P1223R5 13 19 19.36*
Freistehende Bibliothek: Einfache <utility>, <ranges> und <iterator> P1642R11 13* N/A
views::stride  (FTM)* P1899R3 13 19.34*
Kompatibilität zwischen std::tuple und Tupel-ähnlichen Objekten  (FTM)* P2165R4 14 2.9 (teilweise)* 19.36* (teilweise)*
19.37*
teilweise*
Konstante Iteratoren, Sentinels und Ranges korrigieren. views::as_const  (FTM)* P2278R4 13 19.35* (teilweise)*
19.36*
Formatieren von Ranges  (FTM)* P2286R8 16 19.37*(teilweise)*
19.39*(teilweise)*
19.41*(teilweise)*
19.42*
15.0.0*
Verbessertes Standard-Container-Formatieren  (FTM)* P2585R1 16 (teilweise)*
17
19.42* 15.0.0*
Formatierte Ausgabebibliothek <print>  (FTM)* P2093R14
P2539R4
14 17 (partiell)*
18
19.37* 15.0.0**
16.0.0*
Formatieren von std::thread::id und std::stacktrace  (FTM)* P2693R1 14 17 (partiell)* 19.38* 15.0.0*
constexpr für ganzzahlige Überladungen von std::to_chars() und std::from_chars()  (FTM)* P2291R3 13 16 19.34* 15.0.0*
ranges::contains() und ranges::contains_subrange()  (FTM)* P2302R4 13 19 19.34* 16.0.0**
Ranges-Faltungsalgorithmen  (FTM)* P2322R6 13 19.35*
views::cartesian_product  (FTM)* P2374R4
P2540R1
13 19.37*
Unterstützung für Move-Only-Typen für Vergleichskonzepte (equality_comparable, totally_ordered, three_way_comparable)  (FTM)* P2404R3 19.36*
Ranges-Iteratoren als Eingaben für Nicht-Ranges-Algorithmen  (FTM)* P2408R5 19.34*
constexpr std::bitset  (FTM)* P2417R2 13 16 19.34* 15.0.0*
basic_string::substr() && P2438R2 16 19.34* 15.0.0*
views::as_rvalue  (FTM)* P2446R2 13 16 19.34* 15.0.0*
Standardbibliothek-Module  (FTM)* P2465R3 15* 17 (partiell)* 19.35*
(teilweise)*
19.36*
std::forward_like()  (FTM)* P2445R1 14 16 19.34* 15.0.0*
Unterstützung für Exklusivmodus für std::fstream  (FTM)* P2467R1 12 18 19.36* 16.0.0*
views::repeat  (FTM)* P2474R2 13 17 19.36* 15.0.0*
Relaxing Range Adaptors to allow for move-only types  (FTM)* P2494R2 14 17 19.34* 15.0.0*
std::basic_string_view Range-Konstruktor soll explizit sein P2499R0 12.2 16 19.34* 15.0.0*
std::generator: synchrone Coroutine-Generatoren für Ranges  (FTM)* P2502R2
P2787R0
14 19.43*
Hinzufügen einer bedingten noexcept-Spezifikation zu std::apply P2517R1 10 18 19.34* 16.0.0*
Explizites Lebenszeitmanagement (std::start_lifetime_as)  (FTM)* P2590R2
P2679R2
Klarifizierung der Handhabung von Encodings in lokalisierter Formatierung von Chrono-Typen  (FTM)* P2419R2 15* 19.34**
std::move_iterator sollte nicht immer input_iterator sein  (FTM)* P2520R0 12.3* 17* 19.34** 15.0.0*
Deduktionsleitfäden-Update für Aufrufoperatoren mit explizitem Objektparameter LWG3617 14 19.34*
Deduktionsleitfäden-Update für static operator() P1169R4 13 16 19.39* 15.0.0*
Standardnamen und Bibliotheksunterstützung für erweiterte Gleitkommatypen P1467R9 13 19.37**
Monadische Operationen für std::expected  (FTM)* P2505R5 13 17 19.36* 15.0.0*
views::enumerate  (FTM)* P2164R9 13 19.37*
std::is_implicit_lifetime  (FTM)* P2674R1 20
std::common_reference_t von std::reference_wrapper soll ein Referenztyp sein  (FTM)*  (FTM)* P2655R3 19.37*
Benutzerspezialisierung von std::allocator_traits nicht zulassen P2652R2 19 19.37*
Deprecating std::numeric_limits::has_denorm P2614R2 18 19.37* 16.0.0*
Mehrparametrische Konstruktoren von views explicit machen P2711R1 17 (partiell)* 19.36** 15.0.0*
DR20: Relaxing Ranges Just A Smidge  (FTM)* P2609R3 15 20 19.37*
DR20: Stashing Stashing Iterators For Proper Flattening P2770R0 14 18 19.37*
DR17: std::visit() für von std::variant abgeleitete Klassen  (FTM)* P2162R2 11.3 13 19.20**
19.30*
13.1.6*
DR20: Conditionally borrowed ranges P2017R1 11 16 19.30*
DR20: Reparatur von Input-Range-Adaptoren und std::counted_iterator P2259R1 12 19.30*(partiell)*
19.31*
DR20: views::join soll alle Views von Ranges verbinden P2328R1 11.2 15 19.30* 14.0.3*
DR20: view erfordert nicht default_initializable  (FTM)* P2325R3 11.3 16 19.30* 15.0.0*
DR20: Range-Adaptor-Objekte binden Argumente per Wert P2281R1 11 14 19.29 (16.10)*
(teilweise)*
19.31*
14.0.3*
DR20: constexpr für std::optional und std::variant  (FTM)*  (FTM)* P2231R1 11.3 (partiell)*
12
13 (partiell)*
19
19.31* 13.1.6* (partiell)
DR20: views::lazy_split und neu gestaltetes views::split P2210R2 12 16 19.31* 15.0.0*
DR20: Korrektur von ranges::istream_view P2432R1 12 16 19.31* 15.0.0*
DR20: view mit Besitz  (FTM)* P2415R2 12 14 19.31* 14.0.3*
DR20: Behebung des Locale-Handlings in Chrono-Formatierern  (FTM)* P2372R3
P2418R2
13 19.31*
DR20: Bereinigung von Integer-Klassen-Typen P2393R1 19.32*
DR20: Compile-Zeit-Prüfungen von Format-Strings; Reduzierung der Binärcode-Größe der std::format()-Familie  (FTM)* P2216R3 13 14 (partiell)*
15
19.32* 14.0.3*
DR20: Hinzufügen von Unterstützung für nicht-const-formatierbare Typen zu std::format P2418R2 13 15 19.32* 14.0.3*
DR20: std::basic_format_string P2508R1 13 15 19.35* 14.0.3*
DR20: Poison Pills sind zu giftig  (FTM)* P2602R2 14 19 19.36*
DR20: std::format Füllzeichen-Erlaubnisse P2572R1 14 17 19.37*
DR20: Verbesserung der Breitenabschätzung von std::format P2675R1 14 17 19.38*
DR20: Phasenabschlussgarantien von std::barrier  (FTM)* P2588R3 19.28 (16.8)**
19.36*
 

C++23 Feature
 

Papier(e)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*