22 General utilities library [utilities] (original) (raw)

22.10 Function objects [function.objects]

22.10.9 Concept-constrained comparisons [range.cmp]

struct ranges::equal_to { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const;using is_transparent = unspecified;};

template<class T, class U> constexpr bool 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 typeP, the conversion sequences from both T and U to Pare equality-preserving ([concepts.equality]); otherwise, T and U model equality_comparable_with.

Effects:

struct ranges::not_equal_to { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const;using is_transparent = unspecified;};

template<class T, class U> constexpr bool operator()(T&& t, U&& u) const;

Effects: Equivalent to:return !ranges::equal_to{}(std::forward<T>(t), std::forward<U>(u));

struct ranges::greater { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const;using is_transparent = unspecified;};

template<class T, class U> constexpr bool operator()(T&& t, U&& u) const;

Effects: Equivalent to:return ranges::less{}(std::forward<U>(u), std::forward<T>(t));

struct ranges::less { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const;using is_transparent = unspecified;};

template<class T, class U> constexpr bool 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 P are equality-preserving ([concepts.equality]); otherwise, T and U model totally_ordered_with.

For any expressionsET and EU such that decltype((ET)) is T anddecltype((EU)) is U, exactly one ofranges​::​less{}(ET, EU),ranges​::​less{}(EU, ET), orranges​::​equal_to{}(ET, EU)is true.

Effects:

struct ranges::greater_equal { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const;using is_transparent = unspecified;};

template<class T, class U> constexpr bool operator()(T&& t, U&& u) const;

Effects: Equivalent to:return !ranges::less{}(std::forward<T>(t), std::forward<U>(u));

struct ranges::less_equal { template<class T, class U> constexpr bool operator()(T&& t, U&& u) const;using is_transparent = _unspecified_;};

template<class T, class U> constexpr bool operator()(T&& t, U&& u) const;

Effects: Equivalent to:return !ranges::less{}(std::forward<U>(u), std::forward<T>(t));