The function std::move()
is defined as
template
typename std::remove_reference::type&& move(T && t)
std::move is just a type cast, it tells the compiler that the type is an rvalue.
There is no move construction going on. std::move()
accepts a reference and returns a reference. std::move()
is basically just a cast.
Your guess 4. is the right one (assuming that you are actually calling a move constructor in the end).