Когда конструктор перемещения вызывается в функции `std:: move()`?

Функция std::move() определяется как

template<typename T>
typename std::remove_reference<T>::type&& move(T && t)
{ 
    return static_cast<typename std::remove_reference<T>::type&&>( t ); 
}

Есть четыре места, где я могу представить, как будет вызываться конструктор перемещения:

  • Когда передается параметр.
  • Когда выполняется трансляция.
  • Когда возвращается результат.
  • Не в самой функции std::move(), а, возможно, в том месте, где в конечном итоге возвращается возвращаемая ссылка.

Я бы поставил на номер 4, но я не уверен на 100%, поэтому, пожалуйста, объясните свой ответ.

Ответ 1

Движение не происходит. std::move() принимает ссылку и возвращает ссылку. std::move() - это в основном просто актерский состав.

Ваше предположение 4. является правильным (предполагая, что вы на самом деле вызываете конструктор перемещения в конце).

Ответ 2

std:: move - это просто тип, он сообщает компилятору, что тип является rvalue.