【发布时间】:2021-03-24 23:49:15
【问题描述】:
我的代码中存在以下情况,即派生类对基类具有虚拟继承:
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 {}
};
链接:https://godbolt.org/z/bn1EY6
GCC (trunk) 给出以下错误:error: use of deleted function 'Derived::Derived()' 而 Clang (trunk) 编译它没有问题。
如果我将构造函数更改为 Derived() {} 而不是 Derived() = default 或在 Base 类上定义一个空的构造函数,则 GCC 可以工作。
为什么= default 在这种情况下会删除 GCC 中的函数?
【问题讨论】:
-
我认为这是同一个方向:stackoverflow.com/questions/54030976/…
-
你使用的是哪个 gcc 版本?
-
@U.W.它是 GCC 10 主干版本。同样的编译错误出现在 GCC 7 或更高版本上。
-
@LucasMarcondesPavelski 你在哪里添加了
noexcept? ICE 始终是编译器错误。
标签: c++ gcc clang virtual-inheritance