2.1 KiB
[class.compare.secondary]
11 Classes [class]
11.10 Comparisons [class.compare]
11.10.4 Secondary comparison operators [class.compare.secondary]
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.
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.
[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]