std::swappable,std::swappable_with(3) | C++ Standard Libary | std::swappable,std::swappable_with(3) |
NAME¶
std::swappable,std::swappable_with - std::swappable,std::swappable_with
Synopsis¶
Defined in header <concepts>
template< class T >
concept swappable =
requires(T& a, T& b) { (1) (since C++20)
ranges::swap(a, b);
};
template< class T, class U >
concept swappable_with =
std::common_reference_with<T, U> &&
requires(T&& t, U&& u) {
ranges::swap(std::forward<T>(t), std::forward<T>(t)); (2)
(since C++20)
ranges::swap(std::forward<U>(u), std::forward<U>(u));
ranges::swap(std::forward<T>(t), std::forward<U>(u));
ranges::swap(std::forward<U>(u), std::forward<T>(t));
};
The concept swappable<T> specifies that lvalues of type T are
swappable.
The concept swappable_with<T, U> specifies that expressions of the type
and value
category encoded by T and 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 t and
u, that
is, given distinct objects t2 equal to t and u2 equal to u, after evaluating
either
ranges::swap(t, u) or ranges::swap(u, t), t2 is equal to u and u2 is equal to
t.
Equality preservation
Expressions declared in requires expressions of the standard library concepts
are
required to be equality-preserving (except where stated otherwise).
2024.06.10 | http://cppreference.com |