Die im Folgenden beschriebenen Erweiterungen werden im C++ 2017-Sprachmodus und im C++ 2020-Sprachmodus akzeptiert, im strikten Sprachmodus allerdings nur, wenn die Option -R strict_errors
bzw. ANSI-VIOLATIONS=*ERROR nicht gesetzt ist. Darüber hinaus werden in den C++-Modi auch alle Erweiterungen gegenüber ANSI-/ISO-C unterstützt (siehe Abschnitt „Erweiterungen gegenüber ANSI-/ISO-C“).
In der Deklaration eines Klassenelements kann ein qualifizierter Name benutzt werden:
struct A { int A::f(); // laut ANSI int f(); };
Im erweiterten C++ 2017 Modus und im erweiterten C++ 2020 Modus gibt es eine implizite Konversion zwischen Funktionen mit "C" und "C++" Linkage:
extern "C" void f(); void (*pf)() = &f;
Im erweiterten C++ 2017 Modus und im erweiterten C++ 2020 Modus gibt es eine implizite Konversion von einem String-Literal zu dem Typ
char*
(In C++ 2017 haben String Literale den Typconst char *
):char *p1 = "abc"; char *p2 = x ? "abc" : "def";
- Das Präprozessormakro
c_plusplus
wird zusätzlich zum standardkonformen Makro__cplusplus
definiert. Es wird keine Warnung ausgegeben.