std::experimental::ranges:: EqualityComparable, std::experimental::ranges:: EqualityComparableWith
|
ヘッダー
<experimental/ranges/concepts>
で定義
|
||
|
template
<
class
T
>
concept bool EqualityComparable = WeaklyEqualityComparableWith < T, T > ; |
(1) | (ranges TS) |
|
template
<
class
T,
class
U
>
concept
bool
EqualityComparableWith
=
|
(2) | (ranges TS) |
EqualityComparable<T>
は、
T
の比較演算子
==
および
!=
が等価性を反映することを規定する:
==
はオペランドが等しい場合にのみ
true
を返す。
EqualityComparable<T>
が満たされるのは、型
T
のオブジェクト
a
と
b
が与えられたとき、
bool
(
a
==
b
)
が
true
となる場合に限り、
a
と
b
が等しい場合のみである。
a
==
b
が等価性を保存する要件と合わせて、これは
==
が対称的かつ推移的であることを意味し、さらに
==
が少なくとも1つの他のオブジェクトと等しいすべてのオブジェクト
a
に対して反射的であることを意味する。
EqualityComparableWith<T, U>
コンセプトは、(混合の可能性がある)
T
と
U
オペランドに対する比較演算子
==
および
!=
が、等価性と矛盾しない結果を返すことを規定する。混合オペランドの比較は、オペランドを共通の型に変換して比較した場合と等価な結果を返す。
EqualityComparableWith<T, U>
は、型
const
std::
remove_reference_t
<
T
>
の任意のlvalue
t
と、型
const
std::
remove_reference_t
<
U
>
の任意のlvalue
u
が与えられたとき、
C
を
ranges::
common_reference_t
<
const
std::
remove_reference_t
<
T
>
&
,
const
std::
remove_reference_t
<
U
>
&
>
とすると、
bool
(
t
==
u
)
==
bool
(
C
(
t
)
==
C
(
u
)
)
が成り立つ場合にのみ満たされます。
等価性保存
式は、等しい入力が与えられた場合に等しい出力をもたらす場合、 equality preserving であると言います。
- 式への入力は、そのオペランドで構成されます。
- 式からの出力は、その結果と、式によって変更されたすべてのオペランド(存在する場合)で構成されます。
等価性を保持することが要求されるすべての式は、さらに stable(安定性) が要求されます:同じ入力オブジェクトに対するそのような式の2回の評価は、それらの入力オブジェクトに対する明示的な変更がない限り、等しい出力を持たなければなりません。
暗黙的な式のバリエーション
requires-expression は、特定の定数左辺値オペランドに対して非変更的な式を使用する場合、そのオペランドに対して非定数左辺値または(場合によっては定数の)右辺値を受け入れる式の追加バリエーションも暗黙的に要求します。ただし、異なるセマンティクスを持つ式バリエーションが明示的に要求されている場合は除きます。これらの implicit expression variations は、宣言された式と同じセマンティック要件を満たさなければなりません。実装がこれらのバリエーションの構文をどこまで検証するかは未規定です。