Пространства имён
Варианты
Действия

std::swappable, std::swappable_with

Материал из cppreference.com
< cpp‎ | concepts
 
 
 
Определено в заголовочном файле <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 концептов стандартной библиотеки, должны сохранять равенство (если не указано иное).

close