https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78302
Bug ID: 78302 Summary: is_move_constructible_v<tuple<nonmovable>> should be false Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: rs2740 at gmail dot com Target Milestone: --- #include <tuple> #include <type_traits> struct nonmovable { nonmovable(nonmovable&&) = delete; }; static_assert(!std::is_move_constructible_v<std::tuple<nonmovable>>); //fires It's not clear whether this is required by the standard (the standard depicts a defaulted move constructor, and core language rules say that a defaulted move constructor is defined as deleted if a subobject cannot be moved), but in any event this should probably return false as a QoI matter.