concept three_way_comparable_with =
std::three_way_comparable<T, Cat> &&
std::three_way_comparable<U, Cat> &&
__ComparisonCommonTypeWith<T, U> &&
std::three_way_comparable<
std::common_reference_t<
const std::remove_reference_t<T>&,
const std::remove_reference_t<U>&>, Cat> &&
__WeaklyEqualityComparableWith<T, U> &&
__PartiallyOrderedWith<T, U> &&
requires(const std::remove_reference_t<T>& t,
const std::remove_reference_t<U>& u) {
{ t <=> u } -> __ComparesAs<Cat>;
{ u <=> t } -> __ComparesAs<Cat>;
1) The concept std::three_way_comparable
specifies that the three way comparison operator <=>
on T
yield results consistent with the comparison category implied by Cat
.
2) The concept std::three_way_comparable_with
specifies that the three way comparison operator <=>
on (possibly mixed) T
and U
operands yield results consistent with the comparison category implied by Cat
. Comparing mixed operands yields results equivalent to comparing the operands converted to their common type.
__WeaklyEqualityComparableWith, __PartiallyOrderedWith, and __ComparisonCommonTypeWith are exposition-only concepts. See descriptions of equality_comparable
and totally_ordered
.
These concepts are modeled only if they are satisfied and all concepts they subsume are modeled.
1)T
and
Cat
model
std::three_way_comparable<T, Cat>only if, given lvalues
a
and
b
of type
const std::remove_reference_t<T>, following are true:
Cat
is convertible to std::strong_ordering, T
models totally_ordered
.T
,
U
, and
Cat
model
std::three_way_comparable_with<T, U, Cat>only if given
t
and t2
, lvalues denoting distinct equal objects of types const std::remove_reference_t<T> and std::remove_reference_t<T> respectively, andu
and u2
, lvalues denoting distinct equal objects of types const std::remove_reference_t<U> and std::remove_reference_t<U> respectively.Let C
be std::common_reference_t<const std::remove_reference_t<T>&, const std::remove_reference_t<U>&> and given an expression E
and a type C
, let CONVERT_TO<C>(E) be:
the following are true:
Cat
is convertible to std::strong_ordering, T
and U
model std::totally_ordered_with<T, U>.Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).
[edit] Implicit expression variationsA requires expression that uses an expression that is non-modifying for some constant lvalue operand also requires implicit expression variations.
[edit] See alsoRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4