Namespaces
Variants

C++ named requirements: EqualityComparable

From cppreference.net
C++ named requirements

型は == 演算子で動作し、結果は標準的なセマンティクスを持つ必要があります。

目次

要件

T は、型 T または (C++11以降) const T の式 a b c が与えられたとき、以下の式が有効であり指定された効果を持つ場合、 EqualityComparable を満たします:

効果
a == b BooleanTestable を満たす
(C++20まで)
同値関係 を確立する。つまり、以下の性質を満たす:
  • a の全ての値について、 a == a true を返す。
  • a == b ならば、 b == a である。
  • a == b かつ b == c ならば、 a == c である。
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 == が同値関係であることを指定する
(コンセプト)