[cmp.partialord] (original) (raw)
17 Language support library [support]
17.11 Comparisons [cmp]
17.11.2 Comparison category types [cmp.categories]
17.11.2.2 Class partial_ordering [cmp.partialord]
The partial_ordering type is typically used as the result type of a three-way comparison operatorthat (a) admits all of the six two-way comparison operators ([expr.rel], [expr.eq]), (b) does not imply substitutability, and (c) permits two values to be incomparable.215
namespace std {
class partial_ordering {
int value;
bool is_ordered;
constexpr explicit
partial_ordering(eq v) noexcept : value(int(v)), is_ordered(true) {}
constexpr explicit
partial_ordering(ord v) noexcept : value(int(v)), is_ordered(true) {}
constexpr explicit
partial_ordering(ncmp v) noexcept : value(int(v)), is_ordered(false) {} public:
static const partial_ordering less;
static const partial_ordering equivalent;
static const partial_ordering greater;
static const partial_ordering unordered;
friend constexpr bool operator==(partial_ordering v, unspecified) noexcept;
friend constexpr bool operator==(partial_ordering v, partial_ordering w) noexcept = default;
friend constexpr bool operator< (partial_ordering v, unspecified) noexcept;
friend constexpr bool operator> (partial_ordering v, unspecified) noexcept;
friend constexpr bool operator<=(partial_ordering v, unspecified) noexcept;
friend constexpr bool operator>=(partial_ordering v, unspecified) noexcept;
friend constexpr bool operator< (unspecified, partial_ordering v) noexcept;
friend constexpr bool operator> (unspecified, partial_ordering v) noexcept;
friend constexpr bool operator<=(unspecified, partial_ordering v) noexcept;
friend constexpr bool operator>=(unspecified, partial_ordering v) noexcept;
friend constexpr partial_ordering operator<=>(partial_ordering v, unspecified) noexcept;
friend constexpr partial_ordering operator<=>(unspecified, partial_ordering v) noexcept;};
inline constexpr partial_ordering partial_ordering::less(ord::less); inline constexpr partial_ordering partial_ordering::equivalent(eq::equivalent); inline constexpr partial_ordering partial_ordering::greater(ord::greater); inline constexpr partial_ordering partial_ordering::unordered(ncmp::unordered); }
constexpr bool operator==(partial_ordering v, unspecified) noexcept;constexpr bool operator< (partial_ordering v, unspecified) noexcept;constexpr bool operator> (partial_ordering v, unspecified) noexcept;constexpr bool operator<=(partial_ordering v, unspecified) noexcept;constexpr bool operator>=(partial_ordering v, unspecified) noexcept;
Returns:For operator@, v.is_ordered && v.value @ 0.
constexpr bool operator< (unspecified, partial_ordering v) noexcept;constexpr bool operator> (unspecified, partial_ordering v) noexcept;constexpr bool operator<=(unspecified, partial_ordering v) noexcept;constexpr bool operator>=(unspecified, partial_ordering v) noexcept;
Returns:For operator@, v.is_ordered && 0 @ v.value.
constexpr partial_ordering operator<=>(partial_ordering v, unspecified) noexcept;
constexpr partial_ordering operator<=>(unspecified, partial_ordering v) noexcept;
Returns: v < 0 ? partial_ordering::greater : v > 0 ? partial_ordering::less : v.