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_ordering(3) C++ Standard Libary std::strong_ordering(3)

std::strong_ordering - std::strong_ordering


Defined in header <compare>
class strong_ordering; (since C++20)


The class type std::strong_ordering is the result type of a three-way comparison
that


* admits all six relational operators (==, !=, <, <=, >, >=)


* implies substitutability: if a is equivalent to b, f(a) is also equivalent to
f(b), where f denotes a function that reads only comparison-salient state that
is accessible via the argument's public const members. In other words,
equivalent values are indistinguishable.
* does not allow incomparable values: exactly one of a < b, a == b, or a > b must
be true


The type std::strong_ordering has four valid values, implemented as const static
data members of its type:


Member constant Definition
less(inline constexpr) a valid value of the type std::strong_ordering
[static] indicating less-than (ordered before) relationship
(public static member constant)
a valid value of the type std::strong_ordering
equivalent(inline constexpr) indicating equivalence (neither ordered before nor
[static] ordered after), the same as equal
(public static member constant)
a valid value of the type std::strong_ordering
equal(inline constexpr) indicating equivalence (neither ordered before nor
[static] ordered after), the same as equivalent
(public static member constant)
greater(inline constexpr) a valid value of the type std::strong_ordering
[static] indicating greater-than (ordered after) relationship
(public static member constant)


std::strong_ordering is the strongest of the three comparison categories: it is not
implicitly-convertible from any other category and is implicitly-convertible to the
other two.


operator partial_ordering implicit conversion to std::partial_ordering
(public member function)

std::strong_ordering::operator partial_ordering


constexpr operator partial_ordering() const noexcept;

Return value


std::partial_ordering::less if v is less, std::partial_ordering::greater if v is
greater, std::partial_ordering::equivalent if v is equal or equivalent.


operator weak_ordering implicit conversion to std::weak_ordering
(public member function)

std::strong_ordering::operator weak_ordering


constexpr operator weak_ordering() const noexcept;

Return value


std::weak_ordering::less if v is less, std::weak_ordering::greater if v is greater,
std::weak_ordering::equivalent if v is equal or equivalent.


Comparison operators are defined between values of this type and literal 0.
This supports the expressions a <=> b == 0 or a <=> b < 0 that can be used to
convert the result of a three-way comparison operator to a boolean relationship; see
std::is_eq, std::is_lt, etc.


These functions are not visible to ordinary unqualified or qualified lookup, and can
only be found by argument-dependent lookup when std::strong_ordering is an
associated class of the arguments.


The behavior of a program that attempts to compare a strong_ordering with anything
other than the integer literal 0 is undefined.


operator==
operator<
operator> compares with zero or a strong_ordering
operator<= (function)
operator>=
operator<=>

operator==


friend constexpr bool operator==(strong_ordering v, /*unspecified*/ u) (1)
noexcept;
friend constexpr bool operator==(strong_ordering v, strong_ordering w) noexcept (2)
= default;


v, w - std::strong_ordering values to check
u - an unused parameter of any type that accepts literal zero argument

Return value


1) true if v is equivalent or equal, false if v is less or greater
2) true if both parameters hold the same value, false otherwise. Note that equal is
the same as equivalent.

operator<


friend constexpr bool operator<(strong_ordering v, /*unspecified*/ u) noexcept; (1)
friend constexpr bool operator<(/*unspecified*/ u, strong_ordering v) noexcept; (2)


v - a std::strong_ordering value to check
u - an unused parameter of any type that accepts literal zero argument

Return value


1) true if v is less, and false if v is greater, equivalent, or equal
2) true if v is greater, and false if v is less, equivalent, or equal

operator<=


friend constexpr bool operator<=(strong_ordering v, /*unspecified*/ u) (1)
noexcept;
friend constexpr bool operator<=(/*unspecified*/ u, strong_ordering v) (2)
noexcept;


v - a std::strong_ordering value to check
u - an unused parameter of any type that accepts literal zero argument

Return value


1) true if v is less, equivalent, or equal, and false if v is greater
2) true if v is greater, equivalent, or equal, and false if v is less

operator>


friend constexpr bool operator>(strong_ordering v, /*unspecified*/ u) noexcept; (1)
friend constexpr bool operator>(/*unspecified*/ u, strong_ordering v) noexcept; (2)


v - a std::strong_ordering value to check
u - an unused parameter of any type that accepts literal zero argument

Return value


1) true if v is greater, and false if v is less, equivalent, or equal
2) true if v is less, and false if v is greater, equivalent, or equal

operator>=


friend constexpr bool operator>=(strong_ordering v, /*unspecified*/ u) (1)
noexcept;
friend constexpr bool operator>=(/*unspecified*/ u, strong_ordering v) (2)
noexcept;


v - a std::strong_ordering value to check
u - an unused parameter of any type that accepts literal zero argument

Return value


1) true if v is greater, equivalent, or equal, and false if v is less
2) true if v is less, equivalent, or equal, and false if v is greater

operator<=>


friend constexpr strong_ordering operator<=>(strong_ordering v, /*unspecified*/ (1)
u) noexcept;
friend constexpr strong_ordering operator<=>(/*unspecified*/ u, strong_ordering (2)
v) noexcept;


v - a std::strong_ordering value to check
u - an unused parameter of any type that accepts literal zero argument

Return value


1) v.
2) greater if v is less, less if v is greater, otherwise v.


This section is incomplete
Reason: no example


weak_ordering the result type of 3-way comparison that supports all 6 operators
(C++20) and is not substitutable
(class)
partial_ordering the result type of 3-way comparison that supports all 6 operators,
(C++20) is not substitutable, and allows incomparable values
(class)

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.