Statische consxpr-Elemente des gleichen Typs wie die Klasse definiert (zusätzliche Details)

8

Beim Schreiben meiner ersten Frage, wenn das überhaupt möglich ist, stolperte ich über die Frage statisches consxpr-Mitglied des gleichen Typs wie die Klasse, die definiert wird , die ganz klar geantwortet hat, dass meine saubere Lösung mit C ++ 11 nicht möglich ist.

Aber dann kam ich auf diesen Code, der ziemlich nah an dem ursprünglichen Poster ist und ich erreichen möchte:

%Vor%

Also formuliere ich meine Frage neu: Warum kompiliert die Lösung für one und kann verwendet werden, wie Sie es erwarten würden, aber die folgenden Lösungen geben Fehler bei der Verwendung einer unvollständigen Klasse?

%Vor%     
Hurzelchen 20.05.2015, 22:50
quelle

1 Antwort

9

Wie @dyp die Lösung für one kompiliert, weil Funktionsdefinitionen nach dem Klassenrumpf kompiliert werden. Es ist also so, als ob one wie folgt deklariert wurde

%Vor%

Auf der anderen Seite werden Definitionen im Klassenkörper so kompiliert, wie sie im Klassenkörper platziert sind. Wenn also two und three kompiliert werden, ist die Klasse noch nicht vollständig definiert.

    
phantom 20.05.2015, 23:27
quelle