Files
cppdraft_translate/cppdraft/cmp/partialord.md
2025-10-25 03:02:53 +03:00

4.6 KiB
Raw Blame History

[cmp.partialord]

17 Language support library [support]

17.12 Comparisons [cmp]

17.12.2 Comparison category types [cmp.categories]

17.12.2.2 Class partial_ordering [cmp.partialord]

1

#

The partial_ordering type is typically used as the result type of a three-way comparison operator ([expr.spaceship]) for a type that admits all of the six two-way comparison operators ([expr.rel], [expr.eq]), for which equality need not imply substitutability, and that permits two values to be incomparable.190

🔗

namespace std {class partial_ordering {int value; // exposition onlybool is-ordered; // exposition only// exposition-only constructorsconstexpr explicit partial_ordering(ord v) noexcept : value(int(v)), is-ordered(true) {} // exposition onlyconstexpr explicit partial_ordering(ncmp v) noexcept : value(int(v)), is-ordered(false) {} // exposition onlypublic:// valid valuesstatic const partial_ordering less; static const partial_ordering equivalent; static const partial_ordering greater; static const partial_ordering unordered; // comparisonsfriend 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; }; // valid values' definitionsinline constexpr partial_ordering partial_ordering::less(ord::less); inline constexpr partial_ordering partial_ordering::equivalent(ord::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;

2

#

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;

3

#

Returns: For operator@, v.is-ordered && 0 @ v.value.

🔗

constexpr partial_ordering operator<=>(partial_ordering v, unspecified) noexcept;

4

#

Returns: v.

🔗

constexpr partial_ordering operator<=>(unspecified, partial_ordering v) noexcept;

5

#

Returns: v < 0 ? partial_ordering::greater : v > 0 ? partial_ordering::less : v.

190)190)

That is, a < b, a == b, and a > b might all be false.