c++ - 构造函数尝试调用拷贝构造函数,虚继承

标签 c++ constructor copy-constructor virtual-inheritance

我很难说出一个合适的标题。

struct Base
{
    Base(int) {}
    virtual ~Base()=default;
};

struct Derived: virtual public Base
{
    Derived(float, int): Base{1} {}
    Derived(Derived const&)=delete;
    ~Derived()=default;
};

struct Comp: private Derived
{
    Comp(): Base{1}, Derived{1.0f, 1} {}
};

这给出了一个编译器错误:

x.cc: In constructor ‘Comp::Comp()’:
x.cc:16:34: error: use of deleted function ‘Derived::Derived(const Derived&)’
  Comp(): Base{1}, Derived{1.0f, 1} {}
                                            ^
x.cc:10:2: note: declared here
  Derived(Derived const&)=delete;
  ^~~~~~~

这里为什么要请求拷贝构造函数?当我摆脱虚拟继承(以及相应地 Comp 的初始化列表中的 Base(int) 调用)时,问题就消失了。

这是在 gcc 版本 6.2.1 20161124 (Debian 6.2.1-5) 上

最佳答案

这似乎是 GCC 中的错误。 Clang 和 GCC 7 accept the code .

关于c++ - 构造函数尝试调用拷贝构造函数,虚继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41621714/

相关文章:

c++ - 从其他容器构造的 STL 容器(例如,从 vector 列表)

c++ - Qt QFileInfo.isDir() 返回错误结果

c++ - 将数据成员的生命周期限制为一种方法

c++ - 如何设计具有更高可用性和可读性的图节点类?

performance - 我应该避免在 Haskell 中构建吗?

codeigniter - 为什么这个构造函数无法在 Codeigniter 中加载?

C++显式复制构造函数?

c++ - 我不明白 clang 和 GCC 相对于 C++14 中的 [class.copy]/9 获得的结果。

java - Java 是否有默认的复制构造函数(如 C++)?

c++ - 没有前向声明的嵌套函数模板实例在 GCC 上编译,但不在 clang 上编译