C++11 是否保证 return 语句中的局部变量将被移动而不是复制?

Does C++11 guarantee the local variable in a return statement will be moved rather than copied?

#include <vector>

using namespace std;

struct A
{
    A(const vector<int>&) {}
    A(vector<int>&&) {}
};

A f()
{
    vector<int> coll;
    return A{ coll }; // Which constructor of A will be called as per C++11?
}

int main()
{
    f();
}

collreturn A{ coll };中的xvalue吗?

C++11是否保证A(vector<int>&&)会在freturns时被调用?

C++11 不允许移动 coll。当您执行 return <identifier> 时,它只允许在 return 语句中隐式移动,其中 <identifier> 是局部变量的名称。任何比这更复杂的表达式都不会隐式移动。

比这更复杂的表达式不会进行任何形式的省略。