[indirectcallable] (original) (raw)

The indirect callable concepts are used to constrain those algorithms that accept callable objects ([func.def]) as arguments.

namespace std { template<class F, class I> concept indirectly_unary_invocable = indirectly_readable && copy_constructible && invocable<F&, iter_value_t&> && invocable<F&, iter_reference_t> && invocable<F&, iter_common_reference_t> && common_reference_with< invoke_result_t<F&, iter_value_t&>, invoke_result_t<F&, iter_reference_t>>;

template<class F, class I> concept indirectly_regular_unary_invocable = indirectly_readable && copy_constructible && regular_invocable<F&, iter_value_t&> && regular_invocable<F&, iter_reference_t> && regular_invocable<F&, iter_common_reference_t> && common_reference_with< invoke_result_t<F&, iter_value_t&>, invoke_result_t<F&, iter_reference_t>>;

template<class F, class I> concept indirect_unary_predicate = indirectly_readable && copy_constructible && predicate<F&, iter_value_t&> && predicate<F&, iter_reference_t> && predicate<F&, iter_common_reference_t>;

template<class F, class I1, class I2> concept indirect_binary_predicate = indirectly_readable && indirectly_readable && copy_constructible && predicate<F&, iter_value_t&, iter_value_t&> && predicate<F&, iter_value_t&, iter_reference_t> && predicate<F&, iter_reference_t, iter_value_t&> && predicate<F&, iter_reference_t, iter_reference_t> && predicate<F&, iter_common_reference_t, iter_common_reference_t>;

template<class F, class I1, class I2 = I1> concept indirect_equivalence_relation = indirectly_readable && indirectly_readable && copy_constructible && equivalence_relation<F&, iter_value_t&, iter_value_t&> && equivalence_relation<F&, iter_value_t&, iter_reference_t> && equivalence_relation<F&, iter_reference_t, iter_value_t&> && equivalence_relation<F&, iter_reference_t, iter_reference_t> && equivalence_relation<F&, iter_common_reference_t, iter_common_reference_t>;

template<class F, class I1, class I2 = I1> concept indirect_strict_weak_order = indirectly_readable && indirectly_readable && copy_constructible && strict_weak_order<F&, iter_value_t&, iter_value_t&> && strict_weak_order<F&, iter_value_t&, iter_reference_t> && strict_weak_order<F&, iter_reference_t, iter_value_t&> && strict_weak_order<F&, iter_reference_t, iter_reference_t> && strict_weak_order<F&, iter_common_reference_t, iter_common_reference_t>; }