The function std::move() is defined as
std::move()
template typename std::remove_reference::type&& move(T && t)
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).