Defined in header
template< class T >
concept swappable =
template< class T, class U >
concept swappable_with =
swappable<T> specifies that lvalues of type
T are swappable.
swappable_with<T, U> specifies that expressions of the type and value category encoded by
U are swappable with each other.
swappable_with<T, U> is satisfied only if a call to ranges::swap(t, u) exchanges the value of
u, that is, given distinct objects
t2 equal to
u2 equal to
u, after evaluating either ranges::swap(t, u) or ranges::swap(u, t),
t2 is equal to
u2 is equal to
 Equality preservation
Expressions declared in requires-expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).