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.

4635. inline_scheduler is not a scheduler and run_loop's scheduler probably isn't either

Section: 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:

parallel_scheduler (33.15 [exec.par.scheduler]) and task_scheduler (33.13.5 [exec.task.scheduler]) already specify the query.

For 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.

  1. Modify 33.12.1.2 [exec.run.loop.types] as indicated:

    -4- Let sch be an expression of type run-loop-scheduler. The expression schedule(sch) has type run-loopsender and is not potentially-throwing if sch is not potentially-throwing.

    -5- For type set-tag other than set_error_t, the expression get_completion_scheduler<set-tag>(get_env(schedule(sch))) == sch evaluates to true.

    -?- The expression get_forward_progress_guarantee(sch) has the value forward_progress_guarantee::parallel.

    class run-loop-sender;

    -6- run-loop-sender is an exposition-only type that satisfies sender. […]

  2. Modify 33.12.1.2 [exec.run.loop.types] as indicated:

    -1- inline_scheduler is a class that models scheduler (33.6 [exec.sched]). All objects of type inline_scheduler are equal. For a subexpression sch of type inline_scheduler, a query object q with type other than cv get_forward_progress_guarantee_t, and a pack of subexpressions args, the expression sch.query(q, args...) is expression-equivalent to inline-attrs<set_value_t>().query(q, args...).

    -?- For a subexpression sch of type inline_scheduler, the expression get_forward_progress_guarantee(sch) has the value forward_progress_guarantee::weakly_parallel.