Nehmen Sie dieses einfache Beispiel.Das Erben des Standardkonstruktors schlägt in gcc fehl und funktioniert beim Clalhen, welcher hat den Fehler?
struct Base {
// Base::Base() defined by the compiler
};
struct Derived: Base {
using Base::Base; // Should inherit Base::Base()
Derived(int value):
m_value(value)
{}
private:
int m_value; // If Base::Base() is invoked, it's default constructed
};
Derived t;
Soweit ich durch das Lesen
cppreference zu verstehen, sollte
Derived
den Standard
Base::Base()
Konstruktor erben und den obigen Code sollte glücklich kompilieren.
Edit: meine schlechte, erzählt die Seite, die ich verlinkt, genau das Gegenteil. Es scheint also, dass Clang eine Regression hat.
jedoch alle Versionen von gcc Ich habe versucht es nicht, beschweren, dass Derived
keinen Standardkonstruktor hat, während Klirren tut es ganz gut, aber erst seit Version 3.9.0; g ++ - 7 segfaults, auch .
Sie können es selbst auf godbolt sehen.
Also, wer ist hier schuld? Clang für die Erlaubnis, oder GCC (Bar der Segfault) für nicht erlaubt?
Obwohl es so nur auf Godbolt zu tun scheint, kann ich die segfault lokal nicht reproduzieren.
@Barry: Gute Arbeit, mein Schüler. (Beat mich, um Sekunden) –
die cppreference Seite, die Sie verknüpft sagt, "Alle Kandidaten geerbt Konstruktoren * das sind nicht die Standard-Konstruktor *" usw. –
Sie haben natürlich Recht, @ n.m., Meine schlechte. Aus einigen Gründen habe ich diesen Teil verpasst. –