[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.4 execution​::​inline_­scheduler [exec.inline.scheduler]") {class *inline-sender*; // *exposition only*template<[receiver](exec.recv.concepts#concept:receiver "33.7.1 Receiver 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.6 Schedulers [exec.sched]") ([[exec.sched]](exec.sched "33.6 Schedulers"))[.](#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.3 Sender 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.1 Receiver 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)
