17 Language support library [support] (original) (raw)

17.11 Comparisons [cmp]

17.11.2 Comparison category types [cmp.categories]

17.11.2.3 Class weak_­ordering [cmp.weakord]

The weak_­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]), and (b) does not imply substitutability.

namespace std { class weak_ordering { int value;

constexpr explicit weak_ordering(eq v) noexcept : value(int(v)) {}  
constexpr explicit weak_ordering(ord v) noexcept : value(int(v)) {} 

public:

static const weak_ordering less;
static const weak_ordering equivalent;
static const weak_ordering greater;


constexpr operator partial_ordering() const noexcept;


friend constexpr bool operator==(weak_ordering v, unspecified) noexcept;
friend constexpr bool operator==(weak_ordering v, weak_ordering w) noexcept = default;
friend constexpr bool operator< (weak_ordering v, unspecified) noexcept;
friend constexpr bool operator> (weak_ordering v, unspecified) noexcept;
friend constexpr bool operator<=(weak_ordering v, unspecified) noexcept;
friend constexpr bool operator>=(weak_ordering v, unspecified) noexcept;
friend constexpr bool operator< (unspecified, weak_ordering v) noexcept;
friend constexpr bool operator> (unspecified, weak_ordering v) noexcept;
friend constexpr bool operator<=(unspecified, weak_ordering v) noexcept;
friend constexpr bool operator>=(unspecified, weak_ordering v) noexcept;
friend constexpr weak_ordering operator<=>(weak_ordering v, unspecified) noexcept;
friend constexpr weak_ordering operator<=>(unspecified, weak_ordering v) noexcept;

};

inline constexpr weak_ordering weak_ordering::less(ord::less); inline constexpr weak_ordering weak_ordering::equivalent(eq::equivalent); inline constexpr weak_ordering weak_ordering::greater(ord::greater); }

constexpr operator partial_ordering() const noexcept;

Returns:

value == 0 ? partial_ordering::equivalent : value < 0 ? partial_ordering::less : partial_ordering::greater

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

Returns: v.value @ 0 for operator@.

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

Returns: 0 @ v.value for operator@.

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

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

Returns: v < 0 ? weak_­ordering​::​greater : v > 0 ? weak_­ordering​::​less : v.