Я делал некоторые тесты для некоторого кода, который не компилировался, и я обнаружил, что этот код:
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;
}
В С++ 11 не удается скомпилировать (по g++ 7.0.1) с помощью ‘B::B()’ is implicitly deleted because the default definition would be ill-formed
, тогда как в С++ 14 успешно компилируется.
Я попытался выяснить, какая новая функция С++ 14 позволила этому работать, но безрезультатно. description в cppreference не упоминает ничего подобного.
Почему этот код компилируется в С++ 14, но не в С++ 11?