This commit is contained in:
2025-10-25 03:02:53 +03:00
commit 043225d523
3416 changed files with 681196 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
[exec.inline.scheduler]
# 33 Execution control library [[exec]](./#exec)
## 33.13 Coroutine utilities [[exec.coro.util]](exec.coro.util#exec.inline.scheduler)
### 33.13.4 execution::inline_scheduler [exec.inline.scheduler]
namespace std::execution {class [inline_scheduler](#lib:inline_scheduler "33.13.4execution::inline_­scheduler[exec.inline.scheduler]") {class *inline-sender*; // *exposition only*template<[receiver](exec.recv.concepts#concept:receiver "33.7.1Receiver concepts[exec.recv.concepts]") R>class *inline-state*; // *exposition only*public:using scheduler_concept = scheduler_t; constexpr *inline-sender* schedule() noexcept { return {}; }constexpr bool operator==(const inline_scheduler&) const noexcept = default; };}
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L6954)
inline_scheduler is a class that models[scheduler](exec.sched#concept:scheduler "33.6Schedulers[exec.sched]") ([[exec.sched]](exec.sched "33.6Schedulers"))[.](#1.sentence-1)
All objects of type inline_scheduler are equal[.](#1.sentence-2)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L6959)
*inline-sender* is an exposition-only type that satisfies[sender](exec.snd.concepts#concept:sender "33.9.3Sender concepts[exec.snd.concepts]")[.](#2.sentence-1)
The type completion_signatures_of_t<*inline-sender*> is completion_signatures<set_value_t()>[.](#2.sentence-2)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L6965)
Let sndr be an expression of type *inline-sender*,
let rcvr be an expression such that[receiver_of](exec.recv.concepts#concept:receiver_of "33.7.1Receiver concepts[exec.recv.concepts]")<decltype((rcvr)), CS> is true where CS is completion_signatures<set_value_t()>,
then:
- [(3.1)](#3.1)
the expression connect(sndr, rcvr) has
type *inline-state*<remove_cvref_t<decltype((rcvr))>> and is potentially-throwing if and only if((void)sndr, auto(rcvr)) is potentially-throwing, and
- [(3.2)](#3.2)
the expressionget_completion_scheduler<set_value_t>(get_env(sndr)) has
type inline_scheduler and is potentially-throwing
if and only if get_env(sndr) is potentially-throwing[.](#3.sentence-1)
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L6982)
Let *o* be a non-const lvalue of type*inline-state*<Rcvr>, and let REC(*o*) be
a non-const lvalue reference to an object of type Rcvr that
was initialized with the expression rcvr passed to an
invocation of connect that returned *o*, then:
- [(4.1)](#4.1)
the object to which REC(*o*) refers remains valid for
the lifetime of the object to which *o* refers, and
- [(4.2)](#4.2)
the expression start(*o*) is equivalent toset_value(std::move(REC(*o*)))[.](#4.sentence-1)