[comparisons.three.way] (original) (raw)

20 General utilities library [utilities]

20.14 Function objects [function.objects]

20.14.7 Comparisons [comparisons]

20.14.7.7 Class compare_­three_­way [comparisons.three.way]

In this subclause, BUILTIN-PTR-THREE-WAY(T, U)for types T and U is a boolean constant expression.

BUILTIN-PTR-THREE-WAY(T, U) is trueif and only if <=> in the expression

declval() <=> declval()

resolves to a built-in operator comparing pointers.

struct compare_three_way { template<class T, class U> requires three_way_comparable_with<T, U> || BUILTIN-PTR-THREE-WAY(T, U) constexpr auto operator()(T&& t, U&& u) const;

using is_transparent = unspecified; };

template<class T, class U> requires three_way_comparable_with<T, U> || BUILTIN-PTR-THREE-WAY(T, U) constexpr auto operator()(T&& t, U&& u) const;

Preconditions:If the expression std​::​forward<T>(t) <=> std​::​forward<U>(u) results in a call to a built-in operator <=> comparing pointers of type P, the conversion sequences from both T and U to Pare equality-preserving ([concepts.equality]).

Effects: