|
|
|
Defined in header <concepts> | ||
template<class T> concept equality_comparable= __WeaklyEqualityComparableWith<T, T>; | (1) | (since C++20) |
template<class T,class U> concept equality_comparable_with= | (2) | (since C++20) |
Helper concepts | ||
template<class T,class U> concept __WeaklyEqualityComparableWith= | (3) | (exposition only*) |
(4) | ||
template<class T,class U> concept __ComparisonCommonTypeWith= | (until C++23) (exposition only*) | |
template<class T,class U,class C=std::common_reference_t<const T&,const U&>> concept _ComparisonCommonTypeWithImpl= | (since C++23) (exposition only*) | |
std::equality_comparable
specifies that the comparison operators==
and!=
onT
reflects equality:==
yieldstrue if and only if the operands are equal.std::equality_comparable_with
specifies that the comparison operators==
and!=
on (possibly mixed)T
andU
operands yield results consistent with equality. Comparing mixed operands yields results equivalent to comparing the operands converted to their common type.__WeaklyEqualityComparableWith
specifies that an object of typeT
and an object of typeU
can be compared for equality with each other (in either order) using both==
and!=
, and the results of the comparisons are consistent.__ComparisonCommonTypeWith
specifies that two types share a common type, and a const lvalue or a non-const rvalue(since C++23) of either type is convertible to that common type.Contents |
These concepts are modeled only if they are satisfied and all concepts they subsume are modeled.
In the following paragraphs, given an expressionE
and a typeC
,CONVERT_TO<C>(E) is defined as:
| (until C++23) |
| (since C++23) |
a
andb
of typeT
,bool(a== b) istrue if and only ifa
andb
are equal. Together with the requirement thata== b isequality-preserving, this implies that==
is symmetric and transitive, and further that==
is reflexive for all objectsa
that are equal to at least one other object.t
andt2
be lvalues denoting distinct equal objects of typesconststd::remove_reference_t<T> andstd::remove_cvref_t<T> respectively,u
andu2
be lvalues denoting distinct equal objects of typesconststd::remove_reference_t<U> andstd::remove_cvref_t<U> respectively,C
bestd::common_reference_t<conststd::remove_reference_t<T>&,conststd::remove_reference_t<U>&>,the following expression is true:
t
, an lvalue of typeconststd::remove_reference_t<T> andu
, an lvalue of typeconststd::remove_reference_t<U>,the following are true:
The corresponding | (until C++23) |
Let
the following conditions hold:
| (since C++23) |
Expressions declared inrequires expressions of the standard library concepts are required to beequality-preserving (except where stated otherwise).
Arequires expression that uses an expression that is non-modifying for some constant lvalue operand also requiresimplicit expression variations.
equality_comparable
[concept.equalitycomparable] equality_comparable
[concept.equalitycomparable]