Ich würde gerne verstehen, ob der folgende Code im Allgemeinen richtig ist oder nicht:
%Vor%Dieser Code wurde mit mehreren Toolchains kompiliert, ohne Fehler zu generieren (siehe hier ). Das Problem ist, dass ich jetzt einen Instanziierungsfehler bekomme (vielleicht im Zusammenhang mit der Tatsache, dass ich llvm libc ++ verwende, nicht sicher über die Version).
%Vor%Falls dieser Code korrekt ist, bin ich nicht daran interessiert, den Ursprung des Fehlers (Compiler- oder std-Bibliotheksimplementierung) zu untersuchen oder einen Workaround zu haben. Auch hier würde ich gerne verstehen, ob der obige Code formal korrekt ist.
Der Code ist schlecht formatiert. An diesem Punkt:
%Vor% Node<T>
ist immer noch ein unvollständiger Typ. Es gibt derzeit eingebaute Ausnahmen für unvollständige Typen für drei der Container:
T
kann verwendet werden, wenn forward_list
instanziiert wird, wenn der Zuordner den Zuordner erfüllt
Vollständigkeitsanforderungen 17.6.3.5.1. T
muss vor jedem Mitglied der resultierenden Spezialisierung abgeschlossen sein
von forward_list
wird referenziert. " [forwardlist.overview] / 4
T
kann verwendet werden, wenn list
instanziiert wird, wenn der Zuordner die Zuordnungsvollständigkeit erfüllt
Anforderungen 17.6.3.5.1. T
muss abgeschlossen sein, bevor ein Mitglied der resultierenden Spezialisierung von list
ist
verwiesen. " [list.overview] / 3
T
kann verwendet werden, wenn vector
instanziiert wird, wenn der Zuordner die Zuordnungsvollständigkeit erfüllt
Anforderungen 17.6.3.5.1. T
muss vor jedem Mitglied der resultierenden Spezialisierung abgeschlossen sein
vector
wird referenziert. " [vector.overview] / 3
Es gibt keine solche Formulierung für deque
, für die derzeit ein vollständiger Typ erforderlich ist. Scheint inkonsistent zu sein, unvollständige Typen für vector
, aber nicht deque
zu erlauben, aber so ist es.
Es ist kein Fehler in Ihrem Compiler noch in der Standardbibliothek. Das Programm ist schlecht gebildet. Sie dürfen std::deque
nicht mit einem unvollständigen Werttyp instanziieren.