|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||
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]