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
(2.1)
a first overload resolution (
[over.
match]
), as applied to
x @ y
,
(2.1.1)
does not result in a usable candidate, or
(2.1.2)
the selected candidate is not a rewritten candidate, or
(2.2)
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
(2.3)
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
]