相关疑难解决方法(0)

删除的析构函数会改变 C++ 中的聚合初始化吗?

代码如下

struct B {
    ~B() = delete;
};

B * b = new B{};
Run Code Online (Sandbox Code Playgroud)

在最新的 MSVC 中编译失败,出现错误:

error C2512: 'B': no appropriate default constructor available
note: Invalid aggregate initialization
Run Code Online (Sandbox Code Playgroud)

同时GCC和Clang都看不出代码有什么问题,demo: https: //gcc.godbolt.org/z/va9vcsEed

假设 MSVC 中只是一个错误是否正确?

总的来说,析构函数的存在或删除是否会改变聚合初始化的任何规则?

c++ destructor aggregate default-constructor language-lawyer

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