std:: weak_order
|
Defined in header
<compare>
|
||
|
inline
namespace
/* unspecified */
{
inline
constexpr
/* unspecified */
weak_order
=
/* unspecified */
;
|
(since C++20) | |
|
Call signature
|
||
|
template
<
class
T,
class
U
>
requires
/* see below */
|
||
Compares two values using 3-way comparison and produces a result of type
std::weak_ordering
.
Let
t
and
u
be expressions and
T
and
U
denote
decltype
(
(
t
)
)
and
decltype
(
(
u
)
)
respectively,
std
::
weak_order
(
t, u
)
is
expression-equivalent
to:
-
If
std::
is_same_v
<
std::
decay_t
<
T
>
,
std::
decay_t
<
U
>>
is
true
:
-
std::
weak_ordering
(
weak_order
(
t, u
)
)
, if it is a well-formed expression with overload resolution performed in a context that does not include a declaration of
std::weak_order, -
otherwise, if
Tis a floating-point type:-
if
std::
numeric_limits
<
T
>
::
is_iec559
is
true
, performs the weak ordering comparison of floating-point values (see below) and returns that result as a value of type
std::weak_ordering, -
otherwise, yields a value of type
std::weak_orderingthat is consistent with the ordering observed byT's comparison operators,
-
if
std::
numeric_limits
<
T
>
::
is_iec559
is
true
, performs the weak ordering comparison of floating-point values (see below) and returns that result as a value of type
- otherwise, std:: weak_ordering ( std:: compare_three_way ( ) ( t, u ) ) , if it is well-formed,
- otherwise, std:: weak_ordering ( std:: strong_order ( t, u ) ) , if it is well-formed.
-
std::
weak_ordering
(
weak_order
(
t, u
)
)
, if it is a well-formed expression with overload resolution performed in a context that does not include a declaration of
- In all other cases, the expression is ill-formed, which can result in substitution failure when it appears in the immediate context of a template instantiation.
Contents |
Customization point objects
The name
std::weak_order
denotes a
customization point object
, which is a const
function object
of a
literal
semiregular
class type. See
CustomizationPointObject
for details.
Strict weak order of IEEE floating-point types
Let x and y be values of same IEEE floating-point type, and weak_order_less ( x, y ) be the boolean result indicating if x precedes y in the strict weak order defined by the C++ standard.
- If neither x nor y is NaN, then weak_order_less ( x, y ) == true if and only if x < y , i.e. all representations of equal floating-point value are equivalent;
- If x is negative NaN and y is not negative NaN, then weak_order_less ( x, y ) == true ;
- If x is not positive NaN and y is positive NaN, then weak_order_less ( x, y ) == true ;
- If both x and y are NaNs with the same sign, then ( weak_order_less ( x, y ) || weak_order_less ( y, x ) ) == false , i.e. all NaNs with the same sign are equivalent.
Example
|
This section is incomplete
Reason: no example |
See also
|
(C++20)
|
the result type of 3-way comparison that supports all 6 operators and is not substitutable
(class) |
|
(C++20)
|
performs 3-way comparison and produces a result of type
std::strong_ordering
(customization point object) |
|
(C++20)
|
performs 3-way comparison and produces a result of type
std::partial_ordering
(customization point object) |
|
(C++20)
|
performs 3-way comparison and produces a result of type
std::weak_ordering
, even if
operator
<=>
is unavailable
(customization point object) |