【发布时间】:2021-03-23 18:50:51
【问题描述】:
以下内容有效吗?
template <typename T>
std::pair<T, T> foo(T one, T two) { ... }
std::tie(one, two) = foo(std::move(one), std::move(two));
(假设所涉及的类以有效的方式处理分配给移动对象)。
通过阅读更新后的evaluation order proposal,我的假设是这个问题已经修复,但我在标准中找不到可以验证这一点的准确参考。有人可以帮忙提供吗?
【问题讨论】:
-
你可能想选择一个不同的函数名,以便一目了然这与std::transform无关
-
@Brian 好点,更新了问题。
-
LHS 和 RHS 评估都是在分配之前排序的,所以不应该有任何东西。
-
建议更改的链接很吸引人,谢谢。有任何迹象表明它曾被接受?
-
@MarkRansom 我找不到接受的 C++17 提案列表,但第 14-21 点看起来与此处的链接提案有关 en.cppreference.com/w/cpp/language/eval_order
标签: c++ c++17 language-lawyer