25
Iterators library
[iterators]
25.3
Iterator requirements
[iterator.requirements]
25.3.6
Indirect callable requirements
[indirectcallable]
25.3.6.3
Indirect callables
[indirectcallable.indirectinvocable]
1
#
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
<
I
>
&
&
copy_
constructible
<
F
>
&
&
invocable
<
F
&
,
indirect-value-t
<
I
>
>
&
&
invocable
<
F
&
, iter_reference_t
<
I
>
>
&
&
invocable
<
F
&
, iter_common_reference_t
<
I
>
>
&
&
common_
reference_
with
<
invoke_result_t
<
F
&
,
indirect-value-t
<
I
>
>
, invoke_result_t
<
F
&
, iter_reference_t
<
I
>
>
>
;
template
<
class
F,
class
I
>
concept
indirectly_
regular_
unary_
invocable
=
indirectly_
readable
<
I
>
&
&
copy_
constructible
<
F
>
&
&
regular_
invocable
<
F
&
,
indirect-value-t
<
I
>
>
&
&
regular_
invocable
<
F
&
, iter_reference_t
<
I
>
>
&
&
regular_
invocable
<
F
&
, iter_common_reference_t
<
I
>
>
&
&
common_
reference_
with
<
invoke_result_t
<
F
&
,
indirect-value-t
<
I
>
>
, invoke_result_t
<
F
&
, iter_reference_t
<
I
>
>
>
;
template
<
class
F,
class
I
>
concept
indirect_
unary_
predicate
=
indirectly_
readable
<
I
>
&
&
copy_
constructible
<
F
>
&
&
predicate
<
F
&
,
indirect-value-t
<
I
>
>
&
&
predicate
<
F
&
, iter_reference_t
<
I
>
>
&
&
predicate
<
F
&
, iter_common_reference_t
<
I
>
>
;
template
<
class
F,
class
I1,
class
I2
>
concept
indirect_
binary_
predicate
=
indirectly_
readable
<
I1
>
&
&
indirectly_
readable
<
I2
>
&
&
copy_
constructible
<
F
>
&
&
predicate
<
F
&
,
indirect-value-t
<
I1
>
,
indirect-value-t
<
I2
>
>
&
&
predicate
<
F
&
,
indirect-value-t
<
I1
>
, iter_reference_t
<
I2
>
>
&
&
predicate
<
F
&
, iter_reference_t
<
I1
>
,
indirect-value-t
<
I2
>
>
&
&
predicate
<
F
&
, iter_reference_t
<
I1
>
, iter_reference_t
<
I2
>
>
&
&
predicate
<
F
&
, iter_common_reference_t
<
I1
>
, iter_common_reference_t
<
I2
>
>
;
template
<
class
F,
class
I1,
class
I2
=
I1
>
concept
indirect_
equivalence_
relation
=
indirectly_
readable
<
I1
>
&
&
indirectly_
readable
<
I2
>
&
&
copy_
constructible
<
F
>
&
&
equivalence_
relation
<
F
&
,
indirect-value-t
<
I1
>
,
indirect-value-t
<
I2
>
>
&
&
equivalence_
relation
<
F
&
,
indirect-value-t
<
I1
>
, iter_reference_t
<
I2
>
>
&
&
equivalence_
relation
<
F
&
, iter_reference_t
<
I1
>
,
indirect-value-t
<
I2
>
>
&
&
equivalence_
relation
<
F
&
, iter_reference_t
<
I1
>
, iter_reference_t
<
I2
>
>
&
&
equivalence_
relation
<
F
&
, iter_common_reference_t
<
I1
>
, iter_common_reference_t
<
I2
>
>
;
template
<
class
F,
class
I1,
class
I2
=
I1
>
concept
indirect_
strict_
weak_
order
=
indirectly_
readable
<
I1
>
&
&
indirectly_
readable
<
I2
>
&
&
copy_
constructible
<
F
>
&
&
strict_
weak_
order
<
F
&
,
indirect-value-t
<
I1
>
,
indirect-value-t
<
I2
>
>
&
&
strict_
weak_
order
<
F
&
,
indirect-value-t
<
I1
>
, iter_reference_t
<
I2
>
>
&
&
strict_
weak_
order
<
F
&
, iter_reference_t
<
I1
>
,
indirect-value-t
<
I2
>
>
&
&
strict_
weak_
order
<
F
&
, iter_reference_t
<
I1
>
, iter_reference_t
<
I2
>
>
&
&
strict_
weak_
order
<
F
&
, iter_common_reference_t
<
I1
>
, iter_common_reference_t
<
I2
>
>
;
}