The
weak_equality type is typically used
as the result type of a
three-way comparison operator
that (a) admits only equality and inequality comparisons,
and (b) does not imply substitutability
.
namespace std {
class weak_equality {
int value;
explicit constexpr weak_equality(eq v) noexcept : value(int(v)) {}
public:
static const weak_equality equivalent;
static const weak_equality nonequivalent;
friend constexpr bool operator==(weak_equality v, unspecified) noexcept;
friend constexpr bool operator!=(weak_equality v, unspecified) noexcept;
friend constexpr bool operator==(unspecified, weak_equality v) noexcept;
friend constexpr bool operator!=(unspecified, weak_equality v) noexcept;
friend constexpr weak_equality operator<=>(weak_equality v, unspecified) noexcept;
friend constexpr weak_equality operator<=>(unspecified, weak_equality v) noexcept;
};
inline constexpr weak_equality weak_equality::equivalent(eq::equivalent);
inline constexpr weak_equality weak_equality::nonequivalent(eq::nonequivalent);
}