https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71301
Bug ID: 71301 Summary: std::tuple move constructor Product: gcc Version: 7.0 Status: UNCONFIRMED Keywords: ABI Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: glisse at gcc dot gnu.org Target Milestone: --- #include <tuple> #include <type_traits> struct A { A(A&&)=delete; }; static_assert(std::is_trivially_move_constructible<std::tuple<int>>::value); static_assert(!std::is_move_constructible<std::tuple<A>>::value); Both assertions fail, the move constructor should be better constrained, and trivial when it can be. But that breaks the ABI. Discussion (in 3 parts in the archives): https://gcc.gnu.org/ml/libstdc++/2016-04/msg00039.html https://gcc.gnu.org/ml/libstdc++/2016-05/msg00007.html https://gcc.gnu.org/ml/libstdc++/2016-05/msg00050.html