小编Luc*_*ski的帖子

GCC 上虚拟继承行为的奇怪默认空构造函数

我的代码中有以下情况,即派生类具有对基类的虚拟继承:

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 中的功能?

c++ gcc clang virtual-inheritance

6
推荐指数
1
解决办法
106
查看次数

标签 统计

c++ ×1

clang ×1

gcc ×1

virtual-inheritance ×1