From Jason Turner

[indirectcallable.indirectinvocable]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpo8_5m_f0/{from.md → to.md} +69 -0
tmp/tmpo8_5m_f0/{from.md → to.md} RENAMED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Indirect callables <a id="indirectcallable.indirectinvocable">[[indirectcallable.indirectinvocable]]</a>
2
+
3
+ The indirect callable concepts are used to constrain those algorithms
4
+ that accept callable objects ([[func.def]]) as arguments.
5
+
6
+ ``` cpp
7
+ namespace std {
8
+ template<class F, class I>
9
+ concept indirectly_unary_invocable =
10
+ indirectly_readable<I> &&
11
+ copy_constructible<F> &&
12
+ invocable<F&, iter_value_t<I>&> &&
13
+ invocable<F&, iter_reference_t<I>> &&
14
+ invocable<F&, iter_common_reference_t<I>> &&
15
+ common_reference_with<
16
+ invoke_result_t<F&, iter_value_t<I>&>,
17
+ invoke_result_t<F&, iter_reference_t<I>>>;
18
+
19
+ template<class F, class I>
20
+ concept indirectly_regular_unary_invocable =
21
+ indirectly_readable<I> &&
22
+ copy_constructible<F> &&
23
+ regular_invocable<F&, iter_value_t<I>&> &&
24
+ regular_invocable<F&, iter_reference_t<I>> &&
25
+ regular_invocable<F&, iter_common_reference_t<I>> &&
26
+ common_reference_with<
27
+ invoke_result_t<F&, iter_value_t<I>&>,
28
+ invoke_result_t<F&, iter_reference_t<I>>>;
29
+
30
+ template<class F, class I>
31
+ concept indirect_unary_predicate =
32
+ indirectly_readable<I> &&
33
+ copy_constructible<F> &&
34
+ predicate<F&, iter_value_t<I>&> &&
35
+ predicate<F&, iter_reference_t<I>> &&
36
+ predicate<F&, iter_common_reference_t<I>>;
37
+
38
+ template<class F, class I1, class I2>
39
+ concept indirect_binary_predicate =
40
+ indirectly_readable<I1> && indirectly_readable<I2> &&
41
+ copy_constructible<F> &&
42
+ predicate<F&, iter_value_t<I1>&, iter_value_t<I2>&> &&
43
+ predicate<F&, iter_value_t<I1>&, iter_reference_t<I2>> &&
44
+ predicate<F&, iter_reference_t<I1>, iter_value_t<I2>&> &&
45
+ predicate<F&, iter_reference_t<I1>, iter_reference_t<I2>> &&
46
+ predicate<F&, iter_common_reference_t<I1>, iter_common_reference_t<I2>>;
47
+
48
+ template<class F, class I1, class I2 = I1>
49
+ concept indirect_equivalence_relation =
50
+ indirectly_readable<I1> && indirectly_readable<I2> &&
51
+ copy_constructible<F> &&
52
+ equivalence_relation<F&, iter_value_t<I1>&, iter_value_t<I2>&> &&
53
+ equivalence_relation<F&, iter_value_t<I1>&, iter_reference_t<I2>> &&
54
+ equivalence_relation<F&, iter_reference_t<I1>, iter_value_t<I2>&> &&
55
+ equivalence_relation<F&, iter_reference_t<I1>, iter_reference_t<I2>> &&
56
+ equivalence_relation<F&, iter_common_reference_t<I1>, iter_common_reference_t<I2>>;
57
+
58
+ template<class F, class I1, class I2 = I1>
59
+ concept indirect_strict_weak_order =
60
+ indirectly_readable<I1> && indirectly_readable<I2> &&
61
+ copy_constructible<F> &&
62
+ strict_weak_order<F&, iter_value_t<I1>&, iter_value_t<I2>&> &&
63
+ strict_weak_order<F&, iter_value_t<I1>&, iter_reference_t<I2>> &&
64
+ strict_weak_order<F&, iter_reference_t<I1>, iter_value_t<I2>&> &&
65
+ strict_weak_order<F&, iter_reference_t<I1>, iter_reference_t<I2>> &&
66
+ strict_weak_order<F&, iter_common_reference_t<I1>, iter_common_reference_t<I2>>;
67
+ }
68
+ ```
69
+