Returning a stack allocated value does not invoke the move constructor. It doesn't copy either. This is a separate optimization that existed even prior to C++11 called the "named return value optimization" or NRVO for short. And by "sufficient new compiler" you really should just say every compiler. No compiler I know of in existence used by actual people doesn't implement this.
Here's a demo: http://ideone.com/QRqj5P
It's VERY important that this optimization isn't confused with move construction as the latter would actually be extremely less performant than what actually happens.