名前空間
変種
操作

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> は、型 T の左辺値がスワップ可能であることを指定します。

コンセプト swappable_with<T, U> は、 TU によって表される型および値カテゴリの式がお互いにスワップ可能であることを指定します。 swappable_with<T, U> は、 ranges::swap(t, u) の呼び出しが tu の値を交換する、すなわち、 t と等しい別のオブジェクト t2 および u と等しい別のオブジェクト u2 があったときに、 ranges::swap(t, u) または ranges::swap(u, t) を評価した後、 t2u と等しく、 u2t と等しくなる場合にのみ、満たされます。

[編集] 等しさの維持

等しい入力を与えると等しい出力が得られる場合、その式は等しさを維持します。

  • 式への入力がその被演算子から構成される。
  • 式の出力がその結果およびその式によって変更されるすべての被演算子 (もしあれば) から構成される。

等しさを維持することが要求されるすべての式は、さらに安定であることも要求されます。 同じ入力オブジェクトを用いたそのような式の2回の評価は、間にそれらの入力オブジェクトの変更が明示的に挟まれなければ、等しい出力が得られなければなりません。

特に明記されない限り、 requires 式で使用されるすべての式は、等しさを維持することと安定であることが要求され、式の評価は非定数の被演算子のみを変更することができます。 定数である被演算子は変更してはなりません。