This is called the three-way comparison operator.
According to the P0515 paper proposal:
There’s a new three-way comparison operator,
<=>
. The expressiona <=> b
returns an object that compares<0
ifa < b
, compares>0
ifa > b
, and compares==0
ifa
andb
are equal/equivalent.To write all comparisons for your type, just write
operator<=>
that
returns the appropriate category type:
Return an _ordering if your type naturally supports
<
, and we’ll efficiently generate<
,>
,<=
,>=
,==
, and!=
;
otherwise return an _equality, and we’ll efficiently generate
== and !=.Return strong if for your type
a == b
impliesf(a) == f(b)
(substitutability, where f reads only comparison-salient state
accessible using the nonprivate const interface), otherwise return
weak.
The cppreference says:
The three-way comparison operator expressions have the form
lhs <=> rhs (1)
The expression returns an object that
- compares
<0
iflhs < rhs
- compares
>0
iflhs > rhs
- and compares
==0
iflhs
andrhs
are equal/equivalent.