Namespaces
Variants

std::experimental::ranges:: Swappable, std::experimental::ranges:: SwappableWith

From cppreference.net
ヘッダーで定義 <experimental/ranges/concepts>
template < class T >

concept bool Swappable =
requires ( T & a, T & b ) {
ranges:: swap ( a, b ) ;

} ;
(1) (ranges TS)
template < class T, class U >

concept bool SwappableWith =
CommonReference <
const std:: remove_reference_t < T > & ,
const std:: remove_reference_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) (ranges TS)

Swappable<T> コンセプトは、型 T の左辺値が交換可能であることを指定します。

SwappableWith<T, U> コンセプトは、 T U でエンコードされた型と値カテゴリの式が 互いに交換可能であることを指定します。 SwappableWith<T, U> は、 ranges:: swap ( t, u ) の呼び出しによって t u の値が交換される場合にのみ満たされます。 つまり、 t と等しい別個のオブジェクト t2 u と等しい別個のオブジェクト u2 が与えられたとき、 ranges:: swap ( t, u ) または ranges:: swap ( u, t ) のいずれかを評価した後、 t2 u と等しく、 u2 t と等しくなります。

等価性保存

式は、等しい入力が与えられた場合に等しい出力をもたらす場合、 equality preserving であると言います。

  • 式への入力は、そのオペランドで構成されます。
  • 式からの出力は、その結果と、式によって変更されたすべてのオペランド(存在する場合)で構成されます。

等価性を保持することが要求されるすべての式は、さらに stable(安定性) が要求されます:同じ入力オブジェクトに対するそのような式の2回の評価は、それらの入力オブジェクトに対する明示的な変更がない限り、等しい出力を持たなければなりません。

特に明記されていない限り、 requires式 で使用される各式は、等価性を保存し安定していることが要求され、式の評価は非定数オペランドのみを変更できます。定数オペランドは変更してはなりません。