http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53646
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-06-12 15:50:05 UTC --- Trivially copyable is just one small part of the POD requirements. std::pair has always been non-POD, even in c++98, but in c++98 it is trivially copyable, in c++11 that move constructor is non-trivial. It can be made trivial by changing it to: pair(pair&& __p) noexcept(__and_<is_nothrow_move_constructible<_T1>, is_nothrow_move_constructible<_T2>>::value) = default; That might fix this problem, could you test it?