You have been told about return value optimization in a separate answer.
RVO is one of the few occasions where the C++ standard permits
copy/move constructors to be elided for non-trivial types. Move
construction doesn't occur in your example.
On your more general point about move semantics and temporaries, it
would be more correct to say that move semantics are associated with
rvalues, because rvalues bind to rvalue references. An unnamed object
(temporary) is a prvalue and is one example of an rvalue. Another is an
lvalue cast to rvalue using std::move (that produces an xvalue, which
is another category of rvalue).
This will give you more information:
http://en.cppreference.com/w/cpp/language/value_category
Chris