Ich bin heute auf einen sehr unangenehmen Fehler gestoßen, hier ist ein MWE:
%Vor% Entgegen meinen Erwartungen wird " Default
" gedruckt. Zugegeben, der Code ist fehlerhaft, weil die geerbten Konstruktoren von Z
versuchen, X
zu initialisieren, ohne zu spezifizieren, wie Y
(*) . Aber sollte sich der Compiler nicht beschweren? Was ist der Grund dafür, dass der Standardkonstruktor von Y
(und anschließend X
) aufgerufen wird, während ich meinen Parameter 3
völlig ignoriere? Ist dies irgendwo im Standard dokumentiert? Oder ist es ein Fehler in meinem Compiler?
Meine Umgebung ist gcc version 6.2.1 20160916 (Red Hat 6.2.1-2)
. Auch mit -Weffc++ -Wall -Wextra -pedantic
wird keine Compiler-Warnung erzeugt.
Es ist ein g ++ Bug, der Code ist ungültig. Nur Konstruktoren von direkten Basen können vererbt werden:
[namespace.udecl] §3 Wenn eine using-Deklaration einen Konstruktor benennt, muss der Name-Name-Spezifizierer den Namen a haben direkte Basisklasse der zu definierenden Klasse
Tags und Links c++ gcc inheritance constructor