std:: equality_comparable, std:: equality_comparable_with
|
定義先ヘッダ
<concepts>
|
||
|
template
<
class
T
>
concept equality_comparable = __WeaklyEqualityComparableWith < T, T > ; |
(1) | (C++20以降) |
|
template
<
class
T,
class
U
>
concept equality_comparable_with
=
|
(2) | (C++20以降) |
|
補助コンセプト
|
||
|
template
<
class
T,
class
U
>
concept __WeaklyEqualityComparableWith
=
|
(3) | ( 説明専用* ) |
| (4) | ||
|
template
<
class
T,
class
U
>
concept __ComparisonCommonTypeWith
=
|
(C++23まで)
( 説明専用* ) |
|
|
template
<
class
T,
class
U,
class
C
=
std::
common_reference_t
<
const
T
&
,
const
U
&
>
>
concept _ComparisonCommonTypeWithImpl
=
|
(C++23から)
( 説明専用* ) |
|
std::equality_comparable
コンセプトは、
T
の比較演算子
==
および
!=
が等価性を反映することを指定します:
==
はオペランドが等価である場合にのみ
true
を返します。
std::equality_comparable_with
コンセプトは、
==
および
!=
比較演算子が(混在する可能性のある)
T
および
U
オペランドに対して、等価性と整合性のある結果を返すことを指定します。混在したオペランドの比較は、オペランドを共通の型に変換して比較した場合と等価な結果を返します。
__WeaklyEqualityComparableWith
は、型
T
のオブジェクトと型
U
のオブジェクトが相互に(どちらの順序でも)
==
および
!=
を使用して等値比較可能であり、比較結果が一貫していることを指定する。
__ComparisonCommonTypeWith
は、2つの型が共通の型を共有し、いずれかの型のconst左辺値
または非const右辺値
(C++23以降)
がその共通型に変換可能であることを指定する。
目次 |
セマンティック要件
これらの概念は、それらが満たされ、かつそれらが包含するすべての概念がモデル化されている場合にのみモデル化されます。
以下の段落では、式
E
と型
C
が与えられた場合、
CONVERT_TO
<
C
>
(
E
)
は次のように定義されます:
|
(C++23まで) |
|
(C++23以降) |
T
のオブジェクト
a
および
b
が与えられたとき、
a
と
b
が等価である場合にのみ
bool
(
a
==
b
)
が
true
となる場合にのみモデル化される。
equality-preserving
(等価性保存)の要件と合わせて、これは
==
が対称的かつ推移的であることを意味し、さらに少なくとも1つの他のオブジェクトと等価なすべてのオブジェクト
a
に対して
==
が反射的であることを示す。
-
tとt2を、それぞれ型 const std:: remove_reference_t < T > および std:: remove_cvref_t < T > の、互いに等しいが異なるオブジェクトを表す左辺値とし、 -
uとu2を、それぞれ型 const std:: remove_reference_t < U > および std:: remove_cvref_t < U > の、互いに等しいが異なるオブジェクトを表す左辺値とし、 -
Cを std:: common_reference_t < const std:: remove_reference_t < T > & , const std:: remove_reference_t < U > & > とするとき、
以下の式が真となる:
- bool ( t == u ) == bool ( CONVERT_TO < C > ( t2 ) == CONVERT_TO < C > ( u2 ) ) 。
-
t、型 const std:: remove_reference_t < T > の左辺値、および -
u、型 const std:: remove_reference_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 ) 。
|
対応する
|
(C++23まで) |
|
以下を定義する:
以下の条件が満たされること:
|
(C++23以降) |
等価性保存
標準ライブラリコンセプトの requires 式 で宣言される式は、 (特に明記されていない限り) 等価性保存 が要求されます。
暗黙的な式のバリエーション
定数左辺値オペランドに対して非変更式を使用する requires expression は、 暗黙的な式バリエーション も要求します。
参考文献
- C++23標準 (ISO/IEC 14882:2024):
-
-
18.5.4 コンセプト
equality_comparable[concept.equalitycomparable]
-
18.5.4 コンセプト
- C++20規格 (ISO/IEC 14882:2020):
-
-
18.5.3 コンセプト
equality_comparable[concept.equalitycomparable]
-
18.5.3 コンセプト