成员访问运算符的 lhs 求值与其参数的副作用之间是否存在先序关系?

Is there a sequenced-before relationship between the evaluation of the lhs of the member access operator and the side-effects of its arguments?

我已从 cppreference 中阅读 Order of evalution,但我找不到任何与这种情况有关的规则。这是否意味着没有 sequenced-before 关系或者我错过了什么?谢谢

下面的代码片段给出了一个例子。

#include <memory>

struct Foo {
  void func(std::unique_ptr<Foo>) {}
};

int main() {
  auto ptr = std::make_unique<Foo>();
  ptr->func(std::move(ptr)); // Is this valid?
  return 0;
}

之前的 C++1z NO,不要写那个。

Post C++1z 是的,来自 [expr.call]

The postfix-expression is sequenced before each expression in the expression-list and any default argument.

Postfix expression 这里是函数调用,因此执行顺序与

类似
auto ptr_ = ptr.operator->();
auto func_ = &decltype(ptr)::element_type::func;
ptr_->*func_(std::move(ptr));

这当然是正确的。