From Jason Turner

[indirectcallable.indirectinvocable]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpwwt1uoev/{from.md → to.md} +15 -15
tmp/tmpwwt1uoev/{from.md → to.md} RENAMED
@@ -1,69 +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
 
 
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&, indirect-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&, indirect-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&, indirect-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&, indirect-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&, indirect-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&, indirect-value-t<I1>, indirect-value-t<I2>> &&
43
+ predicate<F&, indirect-value-t<I1>, iter_reference_t<I2>> &&
44
+ predicate<F&, iter_reference_t<I1>, indirect-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&, indirect-value-t<I1>, indirect-value-t<I2>> &&
53
+ equivalence_relation<F&, indirect-value-t<I1>, iter_reference_t<I2>> &&
54
+ equivalence_relation<F&, iter_reference_t<I1>, indirect-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&, indirect-value-t<I1>, indirect-value-t<I2>> &&
63
+ strict_weak_order<F&, indirect-value-t<I1>, iter_reference_t<I2>> &&
64
+ strict_weak_order<F&, iter_reference_t<I1>, indirect-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