Concept Subspace :: sus :: mem :: Move

template <class T>
concept Move
requires
std::is_move_constructible_v<
        std::remove_const_t<std::remove_reference_t<T>>>
std::is_move_assignable_v<std::remove_const_t<std::remove_reference_t<T>>>

A Move type can be moved-from to construct a new object of the same type and can be assigned to by move.

A type satisfies Move by implementing a move constructor and assignment operator.

This concept tests the object type of T, not a reference type T& or const T&.

A type that is Copy is also Move. However the type can opt out by explicitly deleting the move constructor and assignment operator. This is not recommended, unless deleting the copy operations too, as it tends to break things that want to move-or-fallback-to-copy.

Example

struct S {
  S() = default;
  S(S&&) = default;
  S& operator=(S&&) = default;
};
static_assert(sus::mem::Move<S>);