在委托给复制/移动构造函数的情况下复制/移动省略

Copy/move elision in case of delegating to a copy/move constructor

提问人:Fedor 提问时间:1/25/2022 更新时间:1/25/2022 访问量:112

问:

在下面的程序中,构造函数将调用委托给复制/移动构造函数,这两个构造函数都被显式删除:A::A(int)

struct A;
A f();

struct A {
    A() {}
    A(int) : A(f()) {}
    A(const A&) = delete;
    A(A&&) = delete;
};

尽管如此,GCC 和 MSVC 都在没有警告的情况下接受该程序。我想他们这样做会考虑复制/移动省略规则。

但是 Clang 拒绝了这个程序,因为

error: call to deleted constructor of 'A'

演示:https://gcc.godbolt.org/z/MjGMaeGrn

哪个编译器就在这里?

C++ 语言律师 copy-constructor copy-elision

评论

0赞 Nicol Bolas 1/25/2022
您使用的是什么语言版本?
1赞 Language Lawyer 1/25/2022
gcc.gnu.org/bugzilla/show_bug.cgi?id=86849
0赞 Fedor 1/25/2022
@NicolBolas,此行为发生在 C++17 和 C++20 版本中。

答: 暂无答案