Dokumentation der Konvertierung "ungültiger Zeigerwert" in C ++ - Implementierungen

Nach dem C ++ Standard ist es für jede Implementierung obligatorisch, "implementierungsdefiniertes Verhalten" zu dokumentieren:

1.3.11[defns.impl.defined] implementierungsdefiniertes Verhalten

Verhalten, für ein wohlgeformtes Programmkonstrukt und korrekte Daten, das von der Implementierung abhängt und das jede Implementierung dokumentiert

Und das Lesen eines ungültigen Zeigerwerts hat ein implementierungsdefiniertes Verhalten (siehe 4.1 Konvertierung von L-Wert in R-Wert[conv.lval]):

wenn das Objekt, auf das sich der glvalue bezieht, einen ungültigen Zeigerwert enthält (3.7.4.2, 3.7.4.3), ist das Verhalten implementierungsdefiniert.

(Zitat aus Entwurf n4527, aber die Aussage, dass "Indirektion durch einen ungültigen Zeigerwert und Übergabe eines ungültigen Zeigerwerts an eine Aufhebungsfunktion undefiniertes Verhalten haben. Jede andere Verwendung eines ungültigen Zeigerwerts hat implementierungsdefiniertes Verhalten." wurde in 3.7 verwendet .4.2 Freigabefunktionen[basic.stc.dynamic.deallocation] seit mindestens Entwurf n3485)

Viele gängige Implementierungen definieren dieses Verhalten jedoch nicht, und viele Experten bezeichnen dies stattdessen als "undefiniertes Verhalten".

Eine wahrscheinliche Ursache für das Fehlen einer eindeutigen Dokumentation ist, dass die Bewertung von "ungültigen Zeigerwerten" im "Index des durch die Implementierung definierten Verhaltens", der in Standardentwürfen nach den Anhängen enthalten ist, fehlt.

Ist dies ein Fehler in der Norm und gibt es offene Fehlerberichte oder Komiteemaßnahmen, die seit C ++ 14 in Bezug darauf ergriffen wurden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage