From Jason Turner

[exec.getcomplsigs]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpadx46bog/{from.md → to.md} +74 -0
tmp/tmpadx46bog/{from.md → to.md} RENAMED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### `execution::get_completion_signatures` <a id="exec.getcomplsigs">[[exec.getcomplsigs]]</a>
2
+
3
+ ``` cpp
4
+ template<class Sndr, class... Env>
5
+ consteval auto get_completion_signatures() -> valid-completion-signatures auto;
6
+ ```
7
+
8
+ Let except be an rvalue subexpression of an unspecified class type
9
+ Except such that `<`Except`> && derived_from<`Except`, exception>` is
10
+ `true`. Let *`CHECKED-COMPLSIGS`*`(`e`)` be e if e is a core constant
11
+ expression whose type satisfies `valid-completion-signatures`;
12
+ otherwise, it is the following expression:
13
+
14
+ ``` cpp
15
+ (e, throw except, completion_signatures())
16
+ ```
17
+
18
+ Let *`get-complsigs`*`<Sndr, Env...>()` be expression-equivalent to
19
+ `remove_reference_t<Sndr>::template get_completion_signatures<Sndr, Env...>()`.
20
+ Let `NewSndr` be `Sndr` if `sizeof...(Env) == 0` is `true`; otherwise,
21
+ `decltype(`s`)` where s is the following expression:
22
+
23
+ ``` cpp
24
+ transform_sender(
25
+ get-domain-late(declval<Sndr>(), declval<Env>()...),
26
+ declval<Sndr>(),
27
+ declval<Env>()...)
28
+ ```
29
+
30
+ *Constraints:* `sizeof...(Env) <= 1` is `true`.
31
+
32
+ *Effects:* Equivalent to: `return `e`;` where e is expression-equivalent
33
+ to the following:
34
+
35
+ - *`CHECKED-COMPLSIGS`*`(`*`get-complsigs`*`<NewSndr, Env...>())` if
36
+ *`get-complsigs`*`<NewSndr, Env...>()` is a well-formed expression.
37
+ - Otherwise, *`CHECKED-COMPLSIGS`*`(`*`get-complsigs`*`<NewSndr>())` if
38
+ *`get-complsigs`*`<NewSndr>()` is a well-formed expression.
39
+ - Otherwise,
40
+ ``` cpp
41
+ completion_signatures<
42
+ SET-VALUE-SIG(await-result-type<NewSndr, env-promise<Env>...>), // [exec.snd.concepts]
43
+ set_error_t(exception_ptr),
44
+ set_stopped_t()>
45
+ ```
46
+
47
+ if `is-awaitable<NewSndr, `*`env-promise`*`<Env>...>` is `true`.
48
+ - Otherwise,
49
+ `(throw `*`dependent-sender-error`*`(), completion_signatures())` if
50
+ `sizeof...(Env) == 0` is `true`, where *`dependent-sender-error`* is
51
+ `dependent_sender_error` or an unspecified type derived publicly and
52
+ unambiguously from `dependent_sender_error`.
53
+ - Otherwise, `(throw `except`, completion_signatures())`.
54
+
55
+ Given a type `Env`, if `completion_signatures_of_t<Sndr>` and
56
+ `completion_signatures_of_t<Sndr, Env>` are both well-formed, they shall
57
+ denote the same type.
58
+
59
+ Let `rcvr` be an rvalue whose type `Rcvr` models `receiver`, and let
60
+ `Sndr` be the type of a sender such that
61
+ `sender_in<Sndr, env_of_t<Rcvr>>` is `true`. Let `Sigs...` be the
62
+ template arguments of the `completion_signatures` specialization named
63
+ by `completion_signatures_of_t<Sndr, env_of_t<Rcvr>>`. Let `CSO` be a
64
+ completion function. If sender `Sndr` or its operation state cause the
65
+ expression `CSO(rcvr, args...)` to be potentially evaluated
66
+ [[basic.def.odr]] then there shall be a signature `Sig` in `Sigs...`
67
+ such that
68
+
69
+ ``` cpp
70
+ MATCHING-SIG(decayed-typeof<CSO>(decltype(args)...), Sig)
71
+ ```
72
+
73
+ is `true` [[exec.general]].
74
+