假设我们有以下代码:
class A {
public:
A() = default;
A(const A&) = delete;
~A() = default;
};
class B {
public:
B() : a{} { }
A a[1];
};
int main()
{
B b;
}
此代码在最新的GCC 9.2,Clang 9.2和MSVC 19.22上编译。
但是当我将默认析构函数更改为~A() { }
时,GCC返回错误use of deleted function 'A::A(const A&)'
。 Clang和MSVC仍然可以编译。
当我编写A
的副本构造函数时,GCC会编译,但是在运行时从未调用过该构造函数。 GCC需要复制构造函数做什么?
是GCC错误吗? (我已经在GodBolt.org上尝试过所有GCC版本,出现相同的错误。)