For templates less, greater, less_­equal, and
greater_­equal, the specializations for any pointer type
yield a strict total order that is consistent among those specializations and
is also consistent with the partial order imposed by
the built-in operators <, >, <=, >=.

When a < b is well-defined
for pointers a and b of type P,
this implies (a < b) == less<P>()(a, b),
(a > b) == greater<P>()(a, b), and so forth.

—end note

]

For template specializations less<void>, greater<void>,
less_­equal<void>, and greater_­equal<void>,
if the call operator calls a built-in operator comparing pointers,
the call operator yields a strict total order
that is consistent among those specializations and
is also consistent with the partial order imposed by those built-in operators.