Ist die Behandlung von Nicht-Constexpr-Standardbibliotheksfunktionen als Constexpr eine konforme Compiler-Erweiterung?
Aktuelle C-Standards schreiben vor, dass Standardbibliotheksfunktionen als deklariert werden müssen constexpr nur, wenn dies ausdrücklich erforderlich ist. Frühere Entwürfe legten jedoch etwas anderes nahe.
C 11 und der Draft Standard
Während der Entwicklung von C 11 zielte ein Vorschlag darauf ab, die Behandlung von nicht-constexpr-Standardbibliotheksfunktionen explizit als zu ermöglichen constexpr. Die Entscheidung von GCC, diese Funktion im strikten Konformitätsmodus zu unterstützen, basierte auf diesem Entwurf.
Konsensverschiebung in C 14
Der Konsens änderte sich jedoch während der Entwicklung von C 14. Der Vorschlag wurde geändert und der endgültige Standard besagt, dass es Implementierungen untersagt ist, eine Standardbibliotheksfunktion constexpr zu deklarieren, es sei denn, dies ist ausdrücklich erforderlich.
Diese Änderung ist auf Bedenken hinsichtlich unterschiedlichem Verhalten zwischen Implementierungen zurückzuführen, da SFINAE dies nutzen könnte, um unterschiedliche zu erzeugen Ergebnisse für identischen Code.
Konformität für GCC
GCCs aktuelle Implementierung für In diesem Fall handelt es sich um eine nicht konforme Erweiterung, da sie gegen den C 14-Standard verstößt. Um die Konformität zu erreichen, müsste GCC Warnungen ausgeben oder diese Funktion im strikten Konformitätsmodus deaktivieren.
Intrinsische Funktionen
Intrinsische Compilerfunktionen sind im Gegensatz zu Standardbibliotheksfunktionen davon ausgenommen Regel, da sie nicht durch die Norm abgedeckt sind. Daher ist die Behandlung intrinsischer Werte als constexpr grundsätzlich zulässig.
Das obige ist der detaillierte Inhalt vonIst die Constexpr-Behandlung von Nicht-Constexpr-Standardbibliotheksfunktionen durch GCC eine konforme Erweiterung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!