sp2*_*nny 5 c++ language-lawyer c++23
标准中有关隐式移动的措辞在 c++23 中发生了变化,
请参阅https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2266r3.html
相关部分是:
返回的符合移动条件的 id 表达式始终是 xvalue
这似乎打破了流行但不明智的“不动”
template<typename T>
auto unmove(T&& v) -> std::remove_reference_t<T>& { return v; }
Run Code Online (Sandbox Code Playgroud)
当前的实现似乎同意:https ://godbolt.org/z/3n39rGM7b
这个重大改变是有意为之的,还是我们可以期待灾难恢复?
由于 P2266R3 的实施体验部分提到了这种破坏,所以我认为这显然是故意的。
修复方法很简单:只需添加显式强制转换即可。
template<typename T>
auto unmove(T&& v) -> std::remove_reference_t<T>& {
return static_cast<std::remove_reference_t<T>&>(v);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
196 次 |
最近记录: |