Подтвердить что ты не робот

Неявно удаленный конструктор по умолчанию работает в С++ 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?

4b9b3361

Ответ 1

Определенно это ошибка в gcc 7, потому что, когда я проверил ваш код в онлайн-компиляторе с gcc 7+, он отлично работал без каких-либо проблем.

Итак, здесь я даю вам эту среду IDE, где вы можете установить свой любимый компилятор и попытаться выполнить тесты, если хотите.

https://godbolt.org/

Извините, я не могу помочь вам лучше, но я не смог воспроизвести вашу ошибку.