Ich war für einige Code einige Tests zu tun, die nicht zusammenstellen, und ich entdeckte, dass dieser Code:Implizit gelöscht Standardkonstruktors arbeitet in C++ 14
struct A {
A(int) {};
virtual void foo() = 0;
};
struct B : public virtual A {
virtual void bar() = 0;
};
struct C : public B {
C() : A(1) {}
virtual void foo() override {}
virtual void bar() override {}
};
int main() {
C c;
return 0;
}
In C++ 11 (auf kompilieren schlägt fehl g ++ 7.0.1) mit ‘B::B()’ is implicitly deleted because the default definition would be ill-formed
, während in C++ 14 kompiliert erfolgreich.
Ich habe versucht, herauszufinden, welche neue Funktion von C++ 14 dies funktioniert, vergeblich. Die description in cppreference erwähnt nichts von der Art, wie es scheint.
Warum kann dieser Code in C++ 14, aber nicht in C++ 11 kompiliert werden?
Funktioniert in C++ 11 (und C++ 03) Modus in Clang. Also vielleicht ein Fehler in GCC? –
@JosephThomson Ich dachte darüber nach - zugegebenermaßen habe ich es in Clang nicht getestet, mein Schlechter. Und tatsächlich funktioniert es auch in 'g ++' im C++ 03 Modus. Also vielleicht sollte ich einen Fehlerbericht öffnen. – Svalorzen
Hängt davon ab, ob jemand eine Antwort auf deine Frage geben kann! –