Files
2025-10-25 03:02:53 +03:00

2.1 KiB

[class.compare.secondary]

11 Classes [class]

11.10 Comparisons [class.compare]

11.10.4 Secondary comparison operators [class.compare.secondary]

1

#

A secondary comparison operator is a relational operator ([expr.rel]) or the != operator.

A defaulted operator function ([over.binary]) for a secondary comparison operator @ shall have a declared return type bool.

2

#

The operator function with parameters x and y is defined as deleted if

a first overload resolution ([over.match]), as applied to x @ y,

does not result in a usable candidate, or

the selected candidate is not a rewritten candidate, or

a second overload resolution for the expression resulting from the interpretation of x @ y using the selected rewritten candidate ([over.match.oper]) does not result in a usable candidate (for example, that expression might be (x <=> y) @ 0), or

x @ y cannot be implicitly converted to bool.

In any of the two overload resolutions above, the defaulted operator function is not considered as a candidate for the @ operator.

Otherwise, the operator function yields x @ y.

3

#

[Example 1: struct HasNoLessThan { };

struct C {friend HasNoLessThan operator<=>(const C&, const C&); bool operator<(const C&) const = default; // OK, function is deleted}; — end example]