std::swappable, std::swappable_with
Определено в заголовочном файле <concepts> | ||
|---|---|---|
template< class T >
concept swappable =
requires(T& a, T& b) {
ranges::swap(a, b);
};
| (1) | (начиная с C++20) |
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));
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));
};
| (2) | (начиная с C++20) |
Концепт swappable<T> задаёт требование, что lvalue-выражения типа T можно обменивать местами.
Концепт swappable_with<T, U> задаёт требование, что выражения типа и категории значения, закодированные в T и U, можно обменивать местами друг с другом. swappable_with<T, U> удовлетворяется только в том случае, если вызов ranges::swap(t, u) меняет местами значения t и u, то есть если для различных объектов t2, равного t, и u2, равного u, после вычисления любого из выражений ranges::swap(t, u) или ranges::swap(u, t), t2 равен u, а u2 равен t.
Сохранение равенства
От выражений, объявленных в requires-выражениях концептов стандартной библиотеки, требуется сохранение равенства (если не указано иное).
Ссылки
- Стандарт C++23 (ISO/IEC 14882:2024):
- 18.4.9 Концепт
swappable[concept.swappable] - Стандарт C++20 (ISO/IEC 14882:2020):
- 18.4.9 Концепт
swappable[concept.swappable]
См. также
|
(C++17)(C++17)(C++17)(C++17) | проверяет, можно ли обменивать местами объекты типа с объектами того же или другого типа (шаблон класса) |
|
(C++26)(C++26)(C++26)(C++26) | проверяет, можно ли обменивать местами объекты одного отражённого типа с объектами того же или другого отражённого типа (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/concepts/swappable