C++ named requirements: EqualityComparable
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
型は
==
演算子で動作し、結果は標準的なセマンティクスを持つ必要があります。
目次 |
要件
型
T
は、型
T
または
(C++11以降)
const
T
の式
a
、
b
、
c
が与えられたとき、以下の式が有効であり指定された効果を持つ場合、
EqualityComparable
を満たします:
| 式 | 型 | 効果 |
|---|---|---|
| a == b |
BooleanTestable
を満たす
(C++20まで) |
同値関係
を確立する。つまり、以下の性質を満たす:
|
boolean-testable
をモデル化する
(C++20以降) |
注記
この要件を満たすためには、組み込みの 比較演算子 を持たない型は、 ユーザー定義の operator == を提供する必要があります。
EqualityComparable かつ LessThanComparable の両方の要件を満たす型について、C++標準ライブラリは以下の区別を設けています
- 等価性 (Equality) 、これは式 a == b の値であり、
- 同値性 (Equivalence) 、これは式 ! ( a < b ) && ! ( b < a ) の値である。
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 283 | C++98 |
T
が
EqualityComparable
であっても、
要件が const T オブジェクトに適用されなかった |
T
ではなく
const T に適用される |
|
LWG 2114
( P2167R3 ) |
C++98 | bool への変換可能性が実装の期待を反映するには弱すぎた | 要件を強化 |
関連項目
|
operator
==
が同値関係であることを指定する
(コンセプト) |