[exec.adapt.general]

# 33 Execution control library [[exec]](./#exec)

## 33.9 Senders [[exec.snd]](exec.snd#exec.adapt.general)

### 33.9.12 Sender adaptors [[exec.adapt]](exec.adapt#general)

#### 33.9.12.1 General [exec.adapt.general]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L3002)

Subclause [[exec.adapt]](exec.adapt "33.9.12 Sender adaptors") specifies a set of sender adaptors[.](#1.sentence-1)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L3005)

The bitwise inclusive or operator is overloaded
for the purpose of creating sender chains[.](#2.sentence-1)

The adaptors also support function call syntax with equivalent semantics[.](#2.sentence-2)

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L3010)

Unless otherwise specified:

- [(3.1)](#3.1)

  A sender adaptor is prohibited from causing observable effects,
apart from moving and copying its arguments,
before the returned sender is connected with a receiver using connect,
and start is called on the resulting operation state[.](#3.1.sentence-1)

- [(3.2)](#3.2)

  A parent sender ([[exec.async.ops]](exec.async.ops "33.3 Asynchronous operations")) with a single child sender sndr has
an associated attribute object equal to*FWD-ENV*(get_env(sndr)) ([[exec.fwd.env]](exec.fwd.env "33.5.1 forwarding_­query"))[.](#3.2.sentence-1)

- [(3.3)](#3.3)

  A parent sender with more than one child sender has
an associated attributes object equal to env<>{}[.](#3.3.sentence-1)

- [(3.4)](#3.4)

  When a parent sender is connected to a receiver rcvr,
any receiver used to connect a child sender has
an associated environment equal to *FWD-ENV*(get_env(rcvr))[.](#3.4.sentence-1)

- [(3.5)](#3.5)

  An adaptor whose child senders are all non-dependent ([[exec.async.ops]](exec.async.ops "33.3 Asynchronous operations"))
is itself non-dependent[.](#3.5.sentence-1)

- [(3.6)](#3.6)

  These requirements apply to any function
that is selected by the implementation of the sender adaptor[.](#3.6.sentence-1)

- [(3.7)](#3.7)

  *Recommended practice*: Implementations should use
the completion signatures of the adaptors
to communicate type errors to users and
to propagate any such type errors from child senders[.](#3.7.sentence-1)

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L3043)

If a sender returned from a sender adaptor specified in [[exec.adapt]](exec.adapt "33.9.12 Sender adaptors") is specified to include set_error_t(Err) among its set of completion signatures
where decay_t<Err> denotes the type exception_ptr,
but the implementation does not potentially evaluate
an error completion operation with an exception_ptr argument,
the implementation is allowed to omit
the exception_ptr error completion signature from the set[.](#4.sentence-1)
