Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions source/exec.tex
Original file line number Diff line number Diff line change
Expand Up @@ -718,9 +718,9 @@
template<@\exposconcept{class-type}@ Promise>
struct with_awaitable_senders;

// \ref{exec.affine.on}, coroutine utility \tcode{affine_on}
struct @\libglobal{affine_on_t}@ { @\unspec@ };
inline constexpr affine_on_t @\libglobal{affine_on}@{};
// \ref{exec.affine}, coroutine utility \tcode{affine}
struct @\libglobal{affine_t}@ { @\unspec@ };
inline constexpr affine_t @\libglobal{affine}@{};

// \ref{exec.inline.scheduler}, inline scheduler
class @\libglobal{inline_scheduler}@;
Expand Down Expand Up @@ -1727,10 +1727,10 @@
Given an expression \tcode{sndr},
whose type is any sender type defined in the standard library,
it is unspecified
whether the expression \tcode{sndr.affine_on()} is well-formed.
whether the expression \tcode{sndr.affine()} is well-formed.
If that expression is well-formed,
then the evaluation thereof meets the semantic requirements of
the \tcode{affine_on}\iref{exec.affine.on} algorithm.
the \tcode{affine}\iref{exec.affine} algorithm.

\pnum
Given an expression \tcode{sndr},
Expand Down Expand Up @@ -7301,24 +7301,24 @@
\end{codeblock}
\end{itemdescr}

\rSec2[exec.affine.on]{\tcode{execution::affine_on}}
\rSec2[exec.affine]{\tcode{execution::affine}}

\pnum
\tcode{affine_on} adapts a sender into one that completes on
\tcode{affine} adapts a sender into one that completes on
the receiver's scheduler.
If the algorithm determines that the adapted sender already completes
on the correct scheduler it can avoid any scheduling operation.

\pnum
The name \tcode{affine_on} denotes a pipeable sender adaptor
The name \tcode{affine} denotes a pipeable sender adaptor
object.
For a subexpression \tcode{sndr}, if \tcode{decltype((\brk{}sndr))}
does not satisfy \libconcept{sender}, \tcode{affine_on(sndr)}
does not satisfy \libconcept{sender}, \tcode{affine(sndr)}
is ill-formed.

\pnum
Otherwise, the expression \tcode{affine_on(sndr)} is
expression-equivalent to \tcode{\exposid{make-sender}(affine_on, env<>(), sndr)}.
Otherwise, the expression \tcode{affine(sndr)} is
expression-equivalent to \tcode{\exposid{make-sender}(affine, env<>(), sndr)}.

\pnum
For a subexpression \tcode{sch} whose type models \libconcept{scheduler},
Expand All @@ -7339,13 +7339,13 @@
\pnum
Let \tcode{sndr} and \tcode{ev} be subexpressions
such that \tcode{Sndr} is \tcode{decltype((sndr))}.
If \tcode{\exposconcept{sender-for}<Sndr, affine_on_t>} is \tcode{false},
then the expression \tcode{affine_on.transform_sender(sndr, ev)} is ill-formed;
If \tcode{\exposconcept{sender-for}<Sndr, affine_t>} is \tcode{false},
then the expression \tcode{affine.transform_sender(sndr, ev)} is ill-formed;
otherwise, it is equal to:
\begin{codeblock}
auto& [_, _, child] = sndr;
if constexpr (requires { std::forward_like<Sndr>(child).affine_on(); }) {
return std::forward_like<Sndr>(child).affine_on();
if constexpr (requires { std::forward_like<Sndr>(child).affine(); }) {
return std::forward_like<Sndr>(child).affine();
} else {
return continues_on(std::forward_like<Sndr>(child),
@\exposidnc{UNSTOPPABLE-SCHEDULER}@(get_start_scheduler(ev)));
Expand All @@ -7354,7 +7354,7 @@

\pnum
\recommended
Implementations should provide \tcode{affine_on} member functions
Implementations should provide \tcode{affine} member functions
for senders that are known to resume on the scheduler where they were started.
Example senders for which that is the case are
\tcode{just},
Expand All @@ -7365,7 +7365,7 @@

\pnum
Let \tcode{\placeholder{out_sndr}} be a subexpression denoting a sender
returned from \tcode{affine_on(sndr)} or one equal to such,
returned from \tcode{affine(sndr)} or one equal to such,
and let \tcode{\placeholder{OutSndr}} be the type \tcode{decltype((\placeholder{out_sndr}))}.
Let \tcode{\placeholder{out_rcvr}} be a subexpression denoting a receiver that
has an environment of type \tcode{Env}.
Expand Down Expand Up @@ -8154,7 +8154,7 @@
If \tcode{\libconcept{same_as}<inline_scheduler, start_scheduler_type>}
is \tcode{true},
returns \tcode{as_awaitable(\brk{}std::forward<Sender>(sndr), *this)};
otherwise returns \tcode{as_awaitable(affine_on(std::for-\linebreak{}ward<Sender>(sndr)), *this)}.
otherwise returns \tcode{as_awaitable(affine(std::forward<\brk{}Sender>(sndr)), *this)}.
\end{itemdescr}

\indexlibrarymember{unhandled_exception}{task::promise_type}%
Expand Down
Loading