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> определяет, что lvalues типа 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 концепций стандартной библиотеки, должны быть сохраняющими равенство (за исключением случаев, указанных отдельно).

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/concepts/swappable

Spec-Zone.ru

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