名前空間
変種
操作

std::swappable, std::swappable_with

From 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以降)

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.

[編集] 等価性保持

標準ライブラリのコンセプトのrequiresで宣言された式は、(特に明記されていない限り)等価性保持である必要があります。

[edit] References

  • C++23標準 (ISO/IEC 14882:2024)
  • 18.4.9 Concept swappable [concept.swappable]
  • C++20 standard (ISO/IEC 14882:2020)
  • 18.4.9 Concept swappable [concept.swappable]
English 日本語 中文(简体) 中文(繁體)