http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46246
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> 2010-10-31 12:05:00 UTC --- Copy elision is an optimisation allowed by the standard, but not mandated. -fno-elide-constructors to disable it, then you should see the move constructor called for the second test case. The relevant constructor must be accessible and callable even if it is elided.