54 lines
2.0 KiB
Markdown
54 lines
2.0 KiB
Markdown
[exec.just]
|
||
|
||
# 33 Execution control library [[exec]](./#exec)
|
||
|
||
## 33.9 Senders [[exec.snd]](exec.snd#exec.just)
|
||
|
||
### 33.9.11 Sender factories [[exec.factories]](exec.factories#exec.just)
|
||
|
||
#### 33.9.11.2 execution::just, execution::just_error, execution::just_stopped [exec.just]
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L2901)
|
||
|
||
just, just_error, and just_stopped are sender factories
|
||
whose asynchronous operations complete synchronously in their start operation
|
||
with a value completion operation,
|
||
an error completion operation, or
|
||
a stopped completion operation, respectively[.](#1.sentence-1)
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L2908)
|
||
|
||
The names just, just_error, and just_stopped denote
|
||
customization point objects[.](#2.sentence-1)
|
||
|
||
Let *just-cpo* be one ofjust, just_error, or just_stopped[.](#2.sentence-2)
|
||
|
||
For a pack of subexpressions ts,
|
||
let Ts be the pack of types decltype((ts))[.](#2.sentence-3)
|
||
|
||
The expression *just-cpo*(ts...) is ill-formed if
|
||
|
||
- [(2.1)](#2.1)
|
||
|
||
([*movable-value*](exec.general#concept:movable-value "33.1 General [exec.general]")<Ts> &&...) is false, or
|
||
|
||
- [(2.2)](#2.2)
|
||
|
||
*just-cpo* is just_error andsizeof...(ts) == 1 is false, or
|
||
|
||
- [(2.3)](#2.3)
|
||
|
||
*just-cpo* is just_stopped andsizeof...(ts) == 0 is false[.](#2.sentence-4)
|
||
|
||
Otherwise, it is expression-equivalent to*make-sender*(*just-cpo*, *product-type*{ts...})[.](#2.sentence-5)
|
||
|
||
For just, just_error, and just_stopped,
|
||
let *set-cpo* beset_value, set_error, and set_stopped, respectively[.](#2.sentence-6)
|
||
|
||
The exposition-only class template *impls-for* ([[exec.snd.expos]](exec.snd.expos "33.9.2 Exposition-only entities"))
|
||
is specialized for *just-cpo* as follows:namespace std::execution {template<>struct *impls-for*<*decayed-typeof*<*just-cpo*>> : *default-impls* {static constexpr auto *start* =[](auto& state, auto& rcvr) noexcept -> void {auto& [...ts] = state; *set-cpo*(std::move(rcvr), std::move(ts)...); }; };}
|