Son locales devueltos automáticamente xvalues

Siguiendo a partir de un comentario que hice sobre esto:

passing std :: vector al constructor y mover semántica Es elstd::move necesario en el siguiente código, para garantizar que el valor devuelto sea un xvalue?

std::vector<string> buildVector()
{
  std::vector<string> local;

  // .... build a vector

  return std::move(local);
}

Tengo entendido que esto es obligatorio. A menudo he visto esto usado al devolver unstd::unique_ptr desde una función, sin embargo GManNickG hizo el siguiente comentario:

Tengo entendido que en una declaración de devolución todas las variables locales son automáticamente valores x (valores que caducan) y se moverán, pero no estoy seguro si eso solo se aplica al objeto devuelto. Entonces, OP debería seguir adelante y poner eso allí hasta que esté más seguro de que no debería ser así. :)

Puede alguien aclarar si lastd::move ¿es necesario

Es dependiente el compilador de comportamiento?

Respuestas a la pregunta(6)

Su respuesta a la pregunta