This is called the three-way comparison operator.
According to the P0515 paper proposal:
There’s a new three-way comparison operator,
<=>. The expressiona <=> breturns an object that compares<0ifa < b, compares>0ifa > b, and compares==0ifaandbare 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 == bimpliesf(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
<0iflhs < rhs- compares
>0iflhs > rhs- and compares
==0iflhsandrhsare equal/equivalent.