Darf ich ein Vorlagenobjekt AB instanziieren, das ein Objektobjekt vom Typ AB enthält?

8

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.

    
Antonio 26.04.2016, 13:22
quelle

2 Antworten

16

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:

  • "Ein unvollständiger Typ 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
  • "Ein unvollständiger Typ 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
  • "Ein unvollständiger Typ 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.

    
Barry 26.04.2016, 13:34
quelle
2

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.

    
user2079303 26.04.2016 13:33
quelle

Tags und Links