关于提案“更简单的隐式移动”(P2266R1),我不确定我是否正确理解了这个新的“符合移动条件”的东西。
如果不正确,请更正以下几点:
[ LIVE ]
std::forward
对于完美转发收到的右值 ref 变为可选
template<class T>
T&& seven(T&& x) { return std::forward<T&&>(x); }
变成
template<class T>
T&& seven(T&& x) { return x; }
std::move
成为本地创建的右值引用的可选
Widget&&
test_seven(Widget w) {
Widget&& rr = seven(std::move(w));
return std::move(rr);
}
变成
Widget&&
test_seven(Widget w) {
Widget&& rr = seven(std::move(w));
return rr;
}
std::move
optionaly 变成parenthesis only
为本地创建的东西返回一个右值引用。
Widget&& h3(Widget t) {
return std::move(t);
}
变成
Widget&& h3(Widget t) {
return (t);
}
注意: (3) : clang trunk 在我发布此内容时警告返回本地堆栈地址。
2021-08-02 更新
https://github.com/cplusplus/papers/issues/968#issuecomment-915353127
https://isocpp.org/files/papers/P1018R13.html#P2266r1
投票结果:✅共识。但是,反对票来自实施者,并带来了相关的新信息。这个话题需要重新讨论,并且可能无法通过全体投票。