http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48038
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-03-09 09:30:17 UTC --- I will analyse this properly asap, but there are a few things that look odd in your example. Why does your move assignment do a swap not a move?