Spec-Zone.ru › C++

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]

См. также

is_swappable_withis_swappableis_nothrow_swappable_withis_nothrow_swappable
(C++17)(C++17)(C++17)(C++17)
проверяет, можно ли обменивать местами объекты типа с объектами того же или другого типа
(шаблон класса)
is_swappable_with_typeis_swappable_typeis_nothrow_swappable_with_typeis_nothrow_swappable_type
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API