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.

Reply via email to