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).