7 Concepts library [concepts.lib]

7.5 Object concepts [concepts.lib.object]

This section describes concepts that specify the basis of the value-oriented programming style on which the library is based.

7.5.1 Concept Movable [concepts.lib.object.movable]

template <class T> concept bool Movable = is_object<T>::value && MoveConstructible<T> && Assignable<T&, T> && Swappable<T>;

There need not be any subsumption relationship between Movable<T> and is_object<T>::value.

7.5.2 Concept Copyable [concepts.lib.object.copyable]

template <class T> concept bool Copyable = CopyConstructible<T> && Movable<T> && Assignable<T&, const T&>;

7.5.3 Concept Semiregular [concepts.lib.object.semiregular]

template <class T> concept bool Semiregular = Copyable<T> && DefaultConstructible<T>;

Note: The Semiregular concept is satisfied by types that behave similarly to built-in types like int, except that they may not be comparable with ==. — end note ]

7.5.4 Concept Regular [concepts.lib.object.regular]

template <class T> concept bool Regular = Semiregular<T> && EqualityComparable<T>;

Note: The Regular concept is satisfied by types that behave similarly to built-in types like int and that are comparable with ==. — end note ]