【发布时间】:2021-10-09 22:17:47
【问题描述】:
请考虑如下简单示例,其中函数bar返回一个带有私有析构函数的A类对象,并且必须进行强制返回值优化(RVO):
class A { ~A() = default; };
A bar() { return {}; }
代码被 Clang 接受,但被 GCC 拒绝并出现错误:
error: 'constexpr A::~A()' is private within this context
2 | A bar() { return {}; }
| ^
https://gcc.godbolt.org/z/q6c33absK
这里有哪一个编译器?
【问题讨论】:
-
VC++ 也接受它。
-
根据 cppreference 从 C++17 开始,析构函数必须在 return 语句处可访问,这会使 Clang 错误而 GCC 正确。
-
@NathanPierson 听起来像是一个答案
-
@alterigel 更有趣的是展示为什么法律上的答案被编纂。
标签: c++ language-lawyer return-value-optimization