Ist die Erweiterungsbehandlung von nicht-constexpr-Bibliotheksfunktionen konform?
Die Fähigkeit von GCC, nicht-constexpr-Standardbibliotheksfunktionen als constexpr in zu behandeln Bestimmte Situationen werfen Fragen zur Konformität auf.
Widerspruch in Standards
Im Entwurf des C 11-Standards schien es, dass die Behandlung integrierter Funktionen als constexpr ausdrücklich erlaubt wäre. Allerdings verschob sich der Konsens in C 12 und der Vorschlag änderte sich, was dazu führte, dass C 14 dieses Verhalten ausdrücklich verbot.
Als-Ob-Regel
In C 11 ist es Es war unklar, ob die Als-ob-Regel dieses Verhalten zuließ. Einige Meinungen deuteten darauf hin, dass dies der Fall sein könnte, aber diese Interpretation wird in der Lösung der LWG-Ausgabe 2013, die sich mit diesem speziellen Thema befasst, nicht bestätigt.
GCC-Implementierung
GCC implementiert Dieses Verhalten basiert auf dem früheren Beschlussvorschlag der LWG 2013, der eine implizite Behandlung als constexpr-Funktionen ermöglichte. Allerdings hat sich die endgültige Auflösung geändert, und diese Erweiterung ist jetzt nicht konform mit C 14.
Konformität im strengen Modus
Zur Konformität mit dem C 14-Standard, GCC sollte bei Auftreten eine Warnung im strikten Konformitätsmodus (-std=c 11 -pedantic oder -std=c 14 -pedantic) ausgeben Nicht-constexpr-Bibliotheksfunktionen, die in constexpr-Kontexten verwendet werden. Alternativ sollte dieses Verhalten in diesen Modi deaktiviert werden.
Intrinsics-Ausnahme
Compiler-Intrinsics werden vom Standard nicht abgedeckt und können daher unterschiedlich behandelt werden. Es ist wahrscheinlich, dass die Verwendung von Compiler-Intrinsics in Constexpr-Kontexten weiterhin akzeptabel ist.
Das obige ist der detaillierte Inhalt vonEntspricht die erweiterte Behandlung von Nicht-constexpr-Standardbibliotheksfunktionen in Constexpr-Kontexten durch GCC dem C-Standard?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!