Namespaces
Variants

std::experimental::ranges:: WeaklyEqualityComparableWith

From cppreference.net
template < class T, class U >

concept bool WeaklyEqualityComparableWith =
requires ( const std:: remove_reference_t < T > & t,
const std:: remove_reference_t < U > & u ) {
{ t == u } - > Boolean && ;
{ t ! = u } - > Boolean && ;
{ u == t } - > Boolean && ;
{ u ! = t } - > Boolean && ;

} ;
(ranges TS)

WeaklyEqualityComparableWith<T, U> の概念は、型 T のオブジェクトと型 U のオブジェクトが相互に(どちらの順序でも)等値比較可能であり、かつ == != の両方を使用した比較結果が一貫していることを規定します。より厳密には、 WeaklyEqualityComparableWith<T, U> は以下の条件が与えられた場合にのみ満たされます。

以下が真実です:

  • t == u u == t t ! = u u ! = t は同じドメインを持つ;
  • bool ( u == t ) == bool ( t == u )
  • bool ( t ! = u ) == ! bool ( t == u ) ;および
  • bool ( u ! = t ) == bool ( t ! = u )

等価性保存

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

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

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

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

暗黙的な式のバリエーション

requires-expression は、特定の定数左辺値オペランドに対して非変更的な式を使用する場合、そのオペランドに対して非定数左辺値または(場合によっては定数の)右辺値を受け入れる式の追加バリエーションも暗黙的に要求します。ただし、異なるセマンティクスを持つ式バリエーションが明示的に要求されている場合は除きます。これらの 暗黙的な式バリエーション は、宣言された式と同じセマンティック要件を満たさなければなりません。実装がこれらのバリエーションの構文をどこまで検証するかは未規定です。

関連項目

operator == が同値関係であることを指定する
(concept)