GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::strong_order(3) C++ Standard Libary std::strong_order(3)

std::strong_order - std::strong_order


Defined in header <compare>
inline namespace /* unspecified */ {


inline constexpr /* unspecified */ strong_order = /* unspecified */; (since C++20)


}
Call signature
template< class T, class U >


requires /* see below */


constexpr std::strong_ordering strong_order( T&& t, U&& u )
noexcept(/* see below */);


Compares two values using 3-way comparison and produces a result of type
std::strong_ordering


Let t and u be expressions and T and U denote decltype((t)) and decltype((u))
respectively, std::strong_order(t, u) is expression-equivalent to:


* If std::is_same_v<std::decay_t<T>, std::decay_t<U>> is true:


* std::strong_ordering(strong_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::strong_order,
* otherwise, if T is a floating-point type:


* if std::numeric_limits<T>::is_iec559 is true, performs the
ISO/IEC/IEEE 60559 totalOrder comparison of floating-point values and
returns that result as a value of type std::strong_ordering (note:
this comparison can distinguish between the positive and negative zero
and between the NaNs with different representations),
* otherwise, yields a value of type std::strong_ordering that is
consistent with the ordering observed by T's comparison operators,


* otherwise, std::strong_ordering(std::compare_three_way()(t, u)) if it is
well-formed.


* 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.


Expression-equivalent


Expression e is expression-equivalent to expression f, if


* e and f have the same effects, and
* either both are constant subexpressions or else neither is a constant
subexpression, and
* either both are potentially-throwing or else neither is potentially-throwing
(i.e. noexcept(e) == noexcept(f)).


Customization point objects


The name std::strong_order denotes a customization point object, which is a const
function object of a literal semiregular class type. For exposition purposes, the
cv-unqualified version of its type is denoted as __strong_order_fn.


All instances of __strong_order_fn are equal. The effects of invoking different
instances of type __strong_order_fn on the same arguments are equivalent, regardless
of whether the expression denoting the instance is an lvalue or rvalue, and is
const-qualified or not (however, a volatile-qualified instance is not required to be
invocable). Thus, std::strong_order can be copied freely and its copies can be used
interchangeably.


Given a set of types Args..., if std::declval<Args>()... meet the requirements for
arguments to std::strong_order above, __strong_order_fn models


* std::invocable<__strong_order_fn, Args...>,
* std::invocable<const __strong_order_fn, Args...>,
* std::invocable<__strong_order_fn&, Args...>, and
* std::invocable<const __strong_order_fn&, Args...>.


Otherwise, no function call operator of __strong_order_fn participates in overload
resolution.


Strict total order of IEEE floating-point types


Let x and y be values of same IEEE floating-point type, and total_order_less(x, y)
be the boolean result indicating if x precedes y in the strict total order defined
by totalOrder in ISO/IEC/IEEE 60559.


(total_order_less(x, y) || total_order_less(y, x)) == false if and only if x and y
have the same bit pattern.


* if neither x nor y is NaN:


* if x < y, then total_order_less(x, y) == true;
* if x > y, then total_order_less(x, y) == false;
* if x == y,


* if x is negative zero and y is positive zero, total_order_less(x, y)
== true,
* if x is not zero and x's exponent field is less than y's, then
total_order_less(x, y) == (x > 0) (only meaningful for decimal
floating-point number);


* if either x or y is NaN:


* if x is negative NaN and y is not negative NaN, then total_order_less(x, y)
== true,
* if x is not positive NaN and y is positive NaN, then total_order_less(x, y)
== true,
* if both x and y are NaNs with the same sign and x's mantissa field is less
than y's, then total_order_less(x, y) == !std::signbit(x).


This section is incomplete
Reason: no example


strong_ordering the result type of 3-way comparison that supports all
(C++20) 6 operators and is substitutable
(class)
weak_order performs 3-way comparison and produces a result of
(C++20) type std::weak_ordering
(customization point object)
partial_order performs 3-way comparison and produces a result of
(C++20) type std::partial_ordering
(customization point object)
performs 3-way comparison and produces a result of
compare_strong_order_fallback type std::strong_ordering, even if operator<=> is
(C++20) unavailable
(customization point object)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.