我的代码中有以下情况,即派生类具有对基类的虚拟继承:
class Base {
int x;
public:
Base(int x): x{x} {}
virtual void f() = 0;
};
class Derived : public virtual Base {
public:
Derived() = default;
};
class Concrete: public Derived {
public:
Concrete(): Base{42} {}
void f() override {}
};
Run Code Online (Sandbox Code Playgroud)
链接:https : //godbolt.org/z/bn1EY6
GCC (trunk) 给出以下错误:error: use of deleted function 'Derived::Derived()'while Clang (trunk) 编译它没有问题。
如果我将构造函数更改为Derived() {}而不是Derived() = default在基类上定义一个空的构造函数,则GCC 可以工作。
为什么= default在这种情况下删除 GCC 中的功能?