Ist das folgende legal?
%Vor%Ein Kommentar zu diesem Beitrag scheint darauf hinzuweisen, dass dies nicht der Fall ist.
BEARBEITEN: Das erscheint mir nicht als ein "undefiniertes Verhalten" -Szenario. Die beabsichtigte Semantik ist eindeutig. Wenn es sich um eine ungültige Verwendung eines unvollständigen Typs handelt, sollte es sich um einen Fehler bei der Kompilierung handeln.
In meinen Tests scheint das gut zu funktionieren (ich habe beide GCC und Clang - beide mit -Wall -Werror -std=c++11
).
Gibt es etwas in der Sprachdefinition (vor C ++ 17), das dies direkt oder indirekt als undefiniertes Verhalten angibt, oder ist es nur unterspezifiziert ?
?Denken Sie daran, dass dies strukturell sehr ähnlich zu etwas wie dem Folgenden ist:
%Vor%Tatsächlich haben wir als Ergebnis von N4371 (von N4527, [vector.overview], wird in C ++ 17 sein):
Ein unvollständiger Typ
T
kann verwendet werden, wenn der Vektor instanziiert wird, wenn der Zuordner die Vollständigkeit des Zuweisers erfüllt Anforderungen 17.6.3.5.1.T
muss vor jedem Mitglied der resultierenden Spezialisierung abgeschlossen sein Vektor ist referenziert.
Vorher konnte vector
nicht mit einem unvollständigen Typ erstellt werden (was tree_node
an diesem Punkt ist), und das wäre undefiniertes Verhalten.
Tags und Links class c++ language-lawyer self-reference