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?
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
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.
Tags und Links c++ c++11 constexpr static-members