The indirect callable concepts are used to constrain those algorithms that accept callable objects ( ISO/IEC 14882:2014 §[func.def]) as arguments.
template <class F, class I> concept bool IndirectUnaryInvocable = Readable<I> && CopyConstructible<F> && Invocable<F&, value_type_t<I>&> && Invocable<F&, reference_t<I>> && Invocable<F&, iter_common_reference_t<I>> && CommonReference< result_of_t<F&(value_type_t<I>&)>, result_of_t<F&(reference_t<I>&&)>>; template <class F, class I> concept bool IndirectRegularUnaryInvocable = Readable<I> && CopyConstructible<F> && RegularInvocable<F&, value_type_t<I>&> && RegularInvocable<F&, reference_t<I>> && RegularInvocable<F&, iter_common_reference_t<I>> && CommonReference< result_of_t<F&(value_type_t<I>&)>, result_of_t<F&(reference_t<I>&&)>>; template <class F, class I> concept bool IndirectUnaryPredicate = Readable<I> && CopyConstructible<F> && Predicate<F&, value_type_t<I>&> && Predicate<F&, reference_t<I>> && Predicate<F&, iter_common_reference_t<I>>; template <class F, class I1, class I2 = I1> concept bool IndirectRelation = Readable<I1> && Readable<I2> && CopyConstructible<F> && Relation<F&, value_type_t<I1>&, value_type_t<I2>&> && Relation<F&, value_type_t<I1>&, reference_t<I2>> && Relation<F&, reference_t<I1>, value_type_t<I2>&> && Relation<F&, reference_t<I1>, reference_t<I2>> && Relation<F&, iter_common_reference_t<I1>, iter_common_reference_t<I2>>; template <class F, class I1, class I2 = I1> concept bool IndirectStrictWeakOrder = Readable<I1> && Readable<I2> && CopyConstructible<F> && StrictWeakOrder<F&, value_type_t<I1>&, value_type_t<I2>&> && StrictWeakOrder<F&, value_type_t<I1>&, reference_t<I2>> && StrictWeakOrder<F&, reference_t<I1>, value_type_t<I2>&> && StrictWeakOrder<F&, reference_t<I1>, reference_t<I2>> && StrictWeakOrder<F&, iter_common_reference_t<I1>, iter_common_reference_t<I2>>; template <class> struct indirect_result_of { }; template <class F, class... Is> requires Invocable<F, reference_t<Is>...> struct indirect_result_of<F(Is...)> : result_of<F(reference_t<Is>&&...)> { };