[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]") &&...) 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)...); }; };}