C ++ 11 Code mit Vererbung kompiliert nicht mit clang

8

Ich habe ein kleines Programm mit so einfachem Code:

%Vor%

Leider kompiliert es nicht. Ich habe versucht, es mit folgenden Teilen des Codes zu kompilieren:

%Vor%

Und beide Varianten kompilieren gut. Ist es ein Fehler in meinem Compiler (clang 3.4)? Ich kann auch nicht verstehen, warum mein ursprünglicher Code nicht kompiliert.

Siehe Live-Beispiel .

Update: Es war ein Aprilscherz, natürlich. Danke an alle, die an der Diskussion teilgenommen haben. Ich danke auch @ecatmur für seine genaue, aber zu ernsthafte Antwort.

Ich wollte den Code bekommen, der seltsam aussah und gleichzeitig mit einem Compiler kompiliert hätte (weil es meiner Frage Respektabilität verschafft hätte). Mein Ziel war also nicht, einen standardkonformen Code zu erstellen. Aber als @Johannes Schaub - littb in Kommentaren notiert hat dieser Code zumindest ein Problem, das es schlecht formt. Die Zeile virtual override override; ist eine Verletzung der folgenden Regel (siehe Absatz [basic.scope.class] 3.3.7 / 1 des Standards):

  

Ein Name N , der in einer Klasse S verwendet wird, muss sich auf die gleiche Deklaration in seinem Kontext beziehen und wenn er im abgeschlossenen Bereich von S neu ausgewertet wird. Für einen Verstoß gegen diese Regel ist keine Diagnose erforderlich.

Wie ich sehen kann, kann es als virtual ::final::override override; umgeschrieben werden, um standardkonform zu werden.

    
Constructor 01.04.2014, 17:14
quelle

1 Antwort

14

Warum sollten Sie erwarten, dass es kompiliert? final ist endgültig, Sie können also nicht davon erben.

In Ihrem anderen Code:

%Vor%

Dies definiert eine letzte Klasse ohne Basisklassen, also ist das in Ordnung.

%Vor%

Dies deklariert eine Beschriftung override und erzeugt bei dieser Beschriftung einen prvalue temporären Typ final initialisiert mit dem Klammerinitialisierer {} , der sofort zerstört wird:

%Vor%     
ecatmur 01.04.2014, 17:33
quelle

Tags und Links