在 C++20 中的复制列表初始化的情况下是否需要移动省略?

问题描述

请考虑以下 C++20 程序:

#include <iostream>

struct A
{
    A() {}
    A( const A& ) = delete;
    A( A&& ) { std::cout << "m "; }
};

int main() {
    [[maybe_unused]] A a = {{A{}}};
}

我预计这里根据标准需要移动省略,所以 A( A&& ) 不会被调用。仍然 Clang 称它为:https://gcc.godbolt.org/z/oobh7vWoh

能否请您说明标准是否真的允许这样做?

附言有一个类似的问题 Copy elision for list-initialization,where is it stated in the standard? 但它与 initializer_list 构造函数不同,所以我不认为这个是重复的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)