This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
inline_scheduler is not a scheduler and run_loop's scheduler probably isn't eitherSection: 33.12.1.2 [exec.run.loop.types], 33.13.4 [exec.inline.scheduler] Status: New Submitter: Sergey Zubkov Opened: 2026-10-30 Last modified: 2026-10-31
Priority: Not Prioritized
View all issues with New status.
Discussion:
The resolution of LWG 4354(i) removed the default of
get_forward_progress_guarantee
(forward_progress_guarantee::weakly_parallel) from
33.5.10 [exec.get.fwd.progress] and added
get_forward_progress_guarantee(sch)
to the requirements of the scheduler concept in
33.6 [exec.sched]. It did not add the query to the
standard schedulers that relied on the default:
33.12.1.2 [exec.run.loop.types] p1 says that run-loop-scheduler
"is an unspecified type that models scheduler", but the value of
get_forward_progress_guarantee for it is not specified.
33.13.4 [exec.inline.scheduler] p1 says that inline_scheduler
"is a class that models scheduler", but also that sch.query(q, args...)
is expression-equivalent to inline-attrs<set_value_t>().query(q, args...),
and inline-attrs (33.9.2 [exec.snd.expos])
answers only get_completion_scheduler and get_completion_domain.
So get_forward_progress_guarantee(inline_scheduler()) is ill-formed,
and inline_scheduler does not satisfy scheduler.
parallel_scheduler (33.15 [exec.par.scheduler]) and
task_scheduler (33.13.5 [exec.task.scheduler]) already specify
the query.
run-loop-scheduler, scheduled work runs one item after
another on the thread that calls run(), and an item that has started
continues to make progress, so the scheduler can provide parallel forward
progress, as observed in the discussion of LWG 4354(i).
For inline_scheduler, work runs on whichever execution agent starts the
operation, so it cannot promise more than weakly_parallel, which is
also the value it had before LWG 4354(i).
Implementation experience: stdexec,
reports forward_progress_guarantee::parallel for the scheduler
of its run_loop and forward_progress_guarantee::weakly_parallel for its
inline_scheduler.
Proposed resolution:
This wording is relative to N5054.
Modify 33.12.1.2 [exec.run.loop.types] as indicated:
-4- Let
-5- For typeschbe an expression of typerun-loop-scheduler. The expressionschedule(sch)has typerun-loopsenderand is not potentially-throwing ifschis not potentially-throwing.set-tagother thanset_error_t, the expressionget_completion_scheduler<set-tag>(get_env(schedule(sch))) == schevaluates totrue. -?- The expressionget_forward_progress_guarantee(sch)has the valueforward_progress_guarantee::parallel.class run-loop-sender;-6-run-loop-senderis an exposition-only type that satisfiessender. […]
Modify 33.12.1.2 [exec.run.loop.types] as indicated:
-1-
-?- For a subexpressioninline_scheduleris a class that modelsscheduler(33.6 [exec.sched]). All objects of typeinline_schedulerare equal. For a subexpressionschof typeinline_scheduler, a query objectqwith type other than cvget_forward_progress_guarantee_t, and a pack of subexpressionsargs, the expressionsch.query(q, args...)is expression-equivalent toinline-attrs<set_value_t>().query(q, args...).schof typeinline_scheduler, the expressionget_forward_progress_guarantee(sch)has the valueforward_progress_guarantee::weakly_parallel.