60 lines
2.5 KiB
Markdown
60 lines
2.5 KiB
Markdown
[exec.snd.general]
|
||
|
||
# 33 Execution control library [[exec]](./#exec)
|
||
|
||
## 33.9 Senders [[exec.snd]](exec.snd#general)
|
||
|
||
### 33.9.1 General [exec.snd.general]
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L1325)
|
||
|
||
Subclauses [[exec.factories]](exec.factories "33.9.11 Sender factories") and [[exec.adapt]](exec.adapt "33.9.12 Sender adaptors") define
|
||
customizable algorithms that return senders[.](#1.sentence-1)
|
||
|
||
Each algorithm has a default implementation[.](#1.sentence-2)
|
||
|
||
Let sndr be the result of an invocation of such an algorithm or
|
||
an object equal to the result ([[concepts.equality]](concepts.equality "18.2 Equality preservation")), and
|
||
let Sndr be decltype((sndr))[.](#1.sentence-3)
|
||
|
||
Let rcvr be a receiver of type Rcvr with associated environment env of type Env such that [sender_to](exec.snd.concepts#concept:sender_to "33.9.3 Sender concepts [exec.snd.concepts]")<Sndr, Rcvr> is true[.](#1.sentence-4)
|
||
|
||
For the default implementation of the algorithm that produced sndr,
|
||
connecting sndr to rcvr and
|
||
starting the resulting operation state ([[exec.async.ops]](exec.async.ops "33.3 Asynchronous operations"))
|
||
necessarily results in the potential evaluation ([[basic.def.odr]](basic.def.odr "6.3 One-definition rule")) of
|
||
a set of completion operations
|
||
whose first argument is a subexpression equal to rcvr[.](#1.sentence-5)
|
||
|
||
Let Sigs be a pack of completion signatures corresponding to
|
||
this set of completion operations, and
|
||
let CS be
|
||
the type of the expression get_completion_signatures<Sndr, Env>()[.](#1.sentence-6)
|
||
|
||
Then CS is
|
||
a specialization of
|
||
the class template completion_signatures ([[exec.cmplsig]](exec.cmplsig "33.10 Completion signatures")),
|
||
the set of whose template arguments is Sigs[.](#1.sentence-7)
|
||
|
||
If none of the types in Sigs are dependent on the type Env, then
|
||
the expression get_completion_signatures<Sndr>() is well-formed and
|
||
its type is CS[.](#1.sentence-8)
|
||
|
||
If a user-provided implementation of the algorithm
|
||
that produced sndr is selected instead of the default:
|
||
|
||
- [(1.1)](#1.1)
|
||
|
||
Any completion signature
|
||
that is in the set of types
|
||
denoted by completion_signatures_of_t<Sndr, Env> and
|
||
that is not part of Sigs shall correspond to
|
||
error or stopped completion operations,
|
||
unless otherwise specified[.](#1.1.sentence-1)
|
||
|
||
- [(1.2)](#1.2)
|
||
|
||
If none of the types in Sigs are dependent on the type Env, thencompletion_signatures_of_t<Sndr> andcompletion_signatures_of_t<Sndr, Env> shall denote the same type[.](#1.2.sentence-1)
|