[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]") 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()[.](#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() 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 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 andcompletion_signatures_of_t shall denote the same type[.](#1.2.sentence-1)