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