<!doctype html><html lang="en">
 <head>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  <meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport">
  <title>P2079R8: Parallel scheduler</title>
<style data-fill-with="stylesheet">/******************************************************************************
 *                   Style sheet for the W3C specifications                   *
 *
 * Special classes handled by this style sheet include:
 *
 * Indices
 *   - .toc for the Table of Contents (<ol class="toc">)
 *     + <span class="secno"> for the section numbers
 *   - #toc for the Table of Contents (<nav id="toc">)
 *   - ul.index for Indices (<a href="#ref">term</a><span>, in § N.M</span>)
 *   - table.index for Index Tables (e.g. for properties or elements)
 *
 * Structural Markup
 *   - table.data for general data tables
 *     -> use 'scope' attribute, <colgroup>, <thead>, and <tbody> for best results !
 *     -> use <table class='complex data'> for extra-complex tables
 *     -> use <td class='long'> for paragraph-length cell content
 *     -> use <td class='pre'> when manual line breaks/indentation would help readability
 *   - dl.switch for switch statements
 *   - ol.algorithm for algorithms (helps to visualize nesting)
 *   - .figure and .caption (HTML4) and figure and figcaption (HTML5)
 *     -> .sidefigure for right-floated figures
 *   - ins/del
 *     -> ins/del.c### for candidate and proposed changes (amendments)
 *
 * Code
 *   - pre and code
 *
 * Special Sections
 *   - .note       for informative notes             (div, p, span, aside, details)
 *   - .example    for informative examples          (div, p, pre, span)
 *   - .issue      for issues                        (div, p, span)
 *   - .advisement for loud normative statements     (div, p, strong)
 *   - .annoying-warning for spec obsoletion notices (div, aside, details)
 *   - .correction for "candidate corrections"       (div, aside, details, section)
 *   - .addition   for "candidate additions"         (div, aside, details, section)
 *   - .correction.proposed for "proposed corrections" (div, aside, details, section)
 *   - .addition.proposed   for "proposed additions"   (div, aside, details, section)
 *
 * Definition Boxes
 *   - pre.def   for WebIDL definitions
 *   - table.def for tables that define other entities (e.g. CSS properties)
 *   - dl.def    for definition lists that define other entitles (e.g. HTML elements)
 *
 * Numbering
 *   - .secno for section numbers in .toc and headings (<span class='secno'>3.2</span>)
 *   - .marker for source-inserted example/figure/issue numbers (<span class='marker'>Issue 4</span>)
 *   - ::before styled for CSS-generated issue/example/figure numbers:
 *     -> Documents wishing to use this only need to add
 *        figcaption::before,
 *        .caption::before { content: "Figure "  counter(figure) " ";  }
 *        .example::before { content: "Example " counter(example) " "; }
 *        .issue::before   { content: "Issue "   counter(issue) " ";   }
 *
 * Header Stuff (ignore, just don't conflict with these classes)
 *   - .head for the header
 *   - .copyright for the copyright
 *
 * Outdated warning for old specs
 *
 * Miscellaneous
 *   - .overlarge for things that should be as wide as possible, even if
 *     that overflows the body text area. This can be used on an item or
 *     on its container, depending on the effect desired.
 *     Note that this styling basically doesn't help at all when printing,
 *     since A4 paper isn't much wider than the max-width here.
 *     It's better to design things to fit into a narrower measure if possible.
 *
 *   - js-added ToC jump links (see fixup.js)
 *
 ******************************************************************************/

/* color variables included separately for reliability */

/******************************************************************************/
/*                                    Body                                    */
/******************************************************************************/

	html {
	}

	body {
		counter-reset: example figure issue;

		/* Layout */
		max-width: 50em;			  /* limit line length to 50em for readability   */
		margin: 0 auto;				/* center text within page                    */
		padding: 1.6em 1.5em 2em 50px; /* assume 16px font size for downlevel clients */
		padding: 1.6em 1.5em 2em calc(26px + 1.5em); /* leave space for status flag    */

		/* Typography */
		line-height: 1.5;
		font-family: sans-serif;
		widows: 2;
		orphans: 2;
		word-wrap: break-word;
		overflow-wrap: break-word;
		hyphens: auto;

		color: black;
		color: var(--text);
		background: white top left fixed no-repeat;
		background: var(--bg) top left fixed no-repeat;
		background-size: 25px auto;
	}


/******************************************************************************/
/*                         Front Matter & Navigation                          */
/******************************************************************************/

/** Header ********************************************************************/

	div.head { margin-bottom: 1em; }
	div.head hr { border-style: solid; }

	div.head h1 {
		font-weight: bold;
		margin: 0 0 .1em;
		font-size: 220%;
	}

	div.head h2 { margin-bottom: 1.5em;}

/** W3C Logo ******************************************************************/

	.head .logo {
		float: right;
		margin: 0.4rem 0 0.2rem .4rem;
	}

	.head img[src*="logos/W3C"] {
		display: block;
		border: solid #1a5e9a;
		border: solid var(--logo-bg);
		border-width: .65rem .7rem .6rem;
		border-radius: .4rem;
		background: #1a5e9a;
		background: var(--logo-bg);
		color: white;
		color: var(--logo-text);
		font-weight: bold;
	}

	.head a:hover > img[src*="logos/W3C"],
	.head a:focus > img[src*="logos/W3C"] {
		opacity: .8;
	}

	.head a:active > img[src*="logos/W3C"] {
		background: #c00;
		background: var(--logo-active-bg);
		border-color: #c00;
		border-color: var(--logo-active-bg);
	}

	/* see also additional rules in Link Styling section */

/** Copyright *****************************************************************/

	p.copyright,
	p.copyright small { font-size: small; }

/** Back to Top / ToC Toggle **************************************************/

	@media print {
		#toc-nav {
			display: none;
		}
	}
	@media not print {
		#toc-nav {
			position: fixed;
			z-index: 3;
			bottom: 0; left: 0;
			margin: 0;
			min-width: 1.33em;
			border-top-right-radius: 2rem;
			box-shadow: 0 0 2px;
			font-size: 1.5em;
		}
		#toc-nav > a {
			display: block;
			white-space: nowrap;

			height: 1.33em;
			padding: .1em 0.3em;
			margin: 0;

			box-shadow: 0 0 2px;
			border: none;
			border-top-right-radius: 1.33em;

			color: #707070;
			color: var(--tocnav-normal-text);
			background: white;
			background: var(--tocnav-normal-bg);
		}
		#toc-nav > a:hover,
		#toc-nav > a:focus {
			color: black;
			color: var(--tocnav-hover-text);
			background: #f8f8f8;
			background: var(--tocnav-hover-bg);
		}
		#toc-nav > a:active {
			color: #c00;
			color: var(--tocnav-active-text);
			background: white;
			background: var(--tocnav-active-bg);
		}

		#toc-nav > #toc-jump {
			padding-bottom: 2em;
			margin-bottom: -1.9em;
		}

		/* statusbar gets in the way on keyboard focus; remove once browsers fix */
		#toc-nav > a[href="#toc"]:not(:hover):focus:last-child {
			padding-bottom: 1.5rem;
		}

		#toc-nav:not(:hover) > a:not(:focus) > span + span {
			/* Ideally this uses :focus-within on #toc-nav */
			display: none;
		}
		#toc-nav > a > span + span {
			padding-right: 0.2em;
		}
	}

/** ToC Sidebar ***************************************************************/

	/* Floating sidebar */
	@media screen {
		body.toc-sidebar #toc {
			position: fixed;
			top: 0; bottom: 0;
			left: 0;
			width: 23.5em;
			max-width: 80%;
			max-width: calc(100% - 2em - 26px);
			overflow: auto;
			padding: 0 1em;
			padding-left: 42px;
			padding-left: calc(1em + 26px);
			color: black;
			color: var(--tocsidebar-text);
			background: inherit;
			background-color: #f7f8f9;
			background-color: var(--tocsidebar-bg);
			z-index: 1;
			box-shadow: -.1em 0 .25em rgba(0,0,0,.1) inset;
			box-shadow: -.1em 0 .25em var(--tocsidebar-shadow) inset;
		}
		body.toc-sidebar #toc h2 {
			margin-top: .8rem;
			font-variant: small-caps;
			font-variant: all-small-caps;
			text-transform: lowercase;
			font-weight: bold;
			color: gray;
			color: hsla(203,20%,40%,.7);
			color: var(--tocsidebar-heading-text);
		}
		body.toc-sidebar #toc-jump:not(:focus) {
			width: 0;
			height: 0;
			padding: 0;
			position: absolute;
			overflow: hidden;
		}
	}
	/* Hide main scroller when only the ToC is visible anyway */
	@media screen and (max-width: 28em) {
		body.toc-sidebar {
			overflow: hidden;
		}
	}

	/* Sidebar with its own space */
	@media screen and (min-width: 78em) {
		body:not(.toc-inline) #toc {
			position: fixed;
			top: 0; bottom: 0;
			left: 0;
			width: 23.5em;
			overflow: auto;
			padding: 0 1em;
			padding-left: 42px;
			padding-left: calc(1em + 26px);
			color: black;
			color: var(--tocsidebar-text);
			background: inherit;
			background-color: #f7f8f9;
			background-color: var(--tocsidebar-bg);
			z-index: 1;
			box-shadow: -.1em 0 .25em rgba(0,0,0,.1) inset;
			box-shadow: -.1em 0 .25em var(--tocsidebar-shadow) inset;
		}
		body:not(.toc-inline) #toc h2 {
			margin-top: .8rem;
			font-variant: small-caps;
			font-variant: all-small-caps;
			text-transform: lowercase;
			font-weight: bold;
			color: gray;
			color: hsla(203,20%,40%,.7);
			color: var(--tocsidebar-heading-text);
		}

		body:not(.toc-inline) {
			padding-left: 29em;
		}
		/* See also Overflow section at the bottom */

		body:not(.toc-inline) #toc-jump:not(:focus) {
			width: 0;
			height: 0;
			padding: 0;
			position: absolute;
			overflow: hidden;
		}
	}
	@media screen and (min-width: 90em) {
		body:not(.toc-inline) {
			margin: 0 4em;
		}
	}

/******************************************************************************/
/*                                Sectioning                                  */
/******************************************************************************/

/** Headings ******************************************************************/

	h1, h2, h3, h4, h5, h6, dt {
		page-break-after: avoid;
		page-break-inside: avoid;
		font: 100% sans-serif;   /* Reset all font styling to clear out UA styles */
		font-family: inherit;	/* Inherit the font family. */
		line-height: 1.2;		/* Keep wrapped headings compact */
		hyphens: manual;		/* Hyphenated headings look weird */
	}

	h2, h3, h4, h5, h6 {
		margin-top: 3rem;
	}

	h1, h2, h3 {
		color: #005A9C;
		color: var(--heading-text);
	}

	h1 { font-size: 170%; }
	h2 { font-size: 140%; }
	h3 { font-size: 120%; }
	h4 { font-weight: bold; }
	h5 { font-style: italic; }
	h6 { font-variant: small-caps; }
	dt { font-weight: bold; }

/** Subheadings ***************************************************************/

	h1 + h2,
	#profile-and-date {
		/* #profile-and-date is a subtitle in an H2 under the H1 */
		margin-top: 0;
	}
	h2 + h3,
	h3 + h4,
	h4 + h5,
	h5 + h6 {
		margin-top: 1.2em; /* = 1 x line-height */
	}

/** Section divider ***********************************************************/

	:not(.head) > :not(.head) + hr {
		font-size: 1.5em;
		text-align: center;
		margin: 1em auto;
		height: auto;
		color: black;
		color: var(--hr-text);
		border: transparent solid 0;
		background: transparent;
	}
	:not(.head) > hr::before {
		content: "\2727\2003\2003\2727\2003\2003\2727";
	}

/******************************************************************************/
/*                            Paragraphs and Lists                            */
/******************************************************************************/

	p {
		margin: 1em 0;
	}

	dd > p:first-child,
	li > p:first-child {
		margin-top: 0;
	}

	ul, ol {
		margin-left: 0;
		padding-left: 2em;
	}

	li {
		margin: 0.25em 0 0.5em;
		padding: 0;
	}

	dl dd {
		margin: 0 0 .5em 2em;
	}

	.head dd + dd { /* compact for header */
		margin-top: -.5em;
	}

	/* Style for algorithms */
	ol.algorithm ol:not(.algorithm),
	.algorithm > ol ol:not(.algorithm) {
	border-left: 0.5em solid #DEF;
	border-left: 0.5em solid var(--algo-border);
	}

	/* Put nice boxes around each algorithm. */
	[data-algorithm]:not(.heading) {
	 padding: .5em;
	 border: thin solid #ddd;
	 border: thin solid var(--algo-border);
	 border-radius: .5em;
	 margin: .5em calc(-0.5em - 1px);
	}
	[data-algorithm]:not(.heading) > :first-child {
	 margin-top: 0;
	}
	[data-algorithm]:not(.heading) > :last-child {
	 margin-bottom: 0;
	}

	/* Style for switch/case <dl>s */
	dl.switch > dd > ol.only,
	dl.switch > dd > .only > ol {
	margin-left: 0;
	}
	dl.switch > dd > ol.algorithm,
	dl.switch > dd > .algorithm > ol {
	margin-left: -2em;
	}
	dl.switch {
	padding-left: 2em;
	}
	dl.switch > dt {
	text-indent: -1.5em;
	margin-top: 1em;
	}
	dl.switch > dt + dt {
	margin-top: 0;
	}
	dl.switch > dt::before {
	content: '\21AA';
	padding: 0 0.5em 0 0;
	display: inline-block;
	width: 1em;
	text-align: right;
	line-height: 0.5em;
	}

/** Terminology Markup ********************************************************/


/******************************************************************************/
/*                                 Inline Markup                              */
/******************************************************************************/

/** Terminology Markup ********************************************************/
	dfn   { /* Defining instance */
		font-weight: bolder;
	}
	a > i { /* Instance of term */
		font-style: normal;
	}
	dt dfn code, code.idl {
		font-size: inherit;
	}
	dfn var {
		font-style: normal;
	}

/** Change Marking ************************************************************/

	del {
		color: #aa0000;
		color: var(--del-text);
		background: transparent;
		background: var(--del-bg);
		text-decoration: line-through;
	}
	ins {
		color: #006100;
		color: var(--ins-text);
		background: transparent;
		background: var(--ins-bg);
		text-decoration: underline;
	}

	/* for amendments (candidate/proposed changes) */

	.amendment ins, .correction ins, .addition ins,
	ins[class^=c] {
		text-decoration-style: dotted;
	}
	.amendment del, .correction del, .addition del,
	del[class^=c] {
		text-decoration-style: dotted;
	}
	.amendment.proposed ins, .correction.proposed ins, .addition.proposed ins,
	ins[class^=c].proposed {
		text-decoration-style: double;
	}
	.amendment.proposed del, .correction.proposed del, .addition.proposed del,
	del[class^=c].proposed {
		text-decoration-style: double;
	}

/** Miscellaneous improvements to inline formatting ***************************/

	sup {
		vertical-align: super;
		font-size: 80%
	}

/******************************************************************************/
/*                                    Code                                    */
/******************************************************************************/

/** General monospace/pre rules ***********************************************/

	pre, code, samp {
		font-family: Menlo, Consolas, "DejaVu Sans Mono", Monaco, monospace;
		font-size: .9em;
		hyphens: none;
		text-transform: none;
		text-align: left;
		text-align: start;
		font-variant: normal;
		orphans: 3;
		widows: 3;
		page-break-before: avoid;
	}
	pre code,
	code code {
		font-size: 100%;
	}

	pre {
		margin-top: 1em;
		margin-bottom: 1em;
		overflow: auto;
	}

/** Inline Code fragments *****************************************************/

	/* Do something nice. */

/******************************************************************************/
/*                                    Links                                   */
/******************************************************************************/

/** General Hyperlinks ********************************************************/

	/* We hyperlink a lot, so make it less intrusive */
	a[href] {
		color: #034575;
		color: var(--a-normal-text);
		text-decoration: underline #707070;
		text-decoration: underline var(--a-normal-underline);
		text-decoration-skip-ink: none;
	}
	a:visited {
		color: #034575;
		color: var(--a-visited-text);
		text-decoration-color: #bbb;
		text-decoration-color: var(--a-visited-underline);
	}

	/* Indicate interaction with the link */
	a[href]:focus,
	a[href]:hover {
		text-decoration-thickness: 2px;
	}
	a[href]:active {
		color: #c00;
		color: var(--a-active-text);
		text-decoration-color: #c00;
		text-decoration-color: var(--a-active-underline);
	}

	/* Backout above styling for W3C logo */
	.head .logo,
	.head .logo a {
		border: none;
		text-decoration: none;
		background: transparent;
	}

/******************************************************************************/
/*                                    Images                                  */
/******************************************************************************/

	img {
		border-style: none;
	}

	img, svg {
		/* Intentionally not color-scheme aware. */
		background: white;
	}

	/* For autogen numbers, add
	  .caption::before, figcaption::before { content: "Figure " counter(figure) ". "; }
	*/

	figure, .figure, .sidefigure {
		page-break-inside: avoid;
		text-align: center;
		margin: 2.5em 0;
	}
	.figure img,	.sidefigure img,	figure img,
	.figure object, .sidefigure object, figure object {
		max-width: 100%;
		margin: auto;
		height: auto;
	}
	.figure pre, .sidefigure pre, figure pre {
		text-align: left;
		display: table;
		margin: 1em auto;
	}
	.figure table, figure table {
		margin: auto;
	}
	@media screen and (min-width: 20em) {
		.sidefigure {
			float: right;
			width: 50%;
			margin: 0 0 0.5em 0.5em;
		}
	}
	.caption, figcaption, caption {
		font-style: italic;
		font-size: 90%;
	}
	.caption::before, figcaption::before, figcaption > .marker {
		font-weight: bold;
	}
	.caption, figcaption {
		counter-increment: figure;
	}

	/* DL list is indented 2em, but figure inside it is not */
	dd > .figure, dd > figure { margin-left: -2em; }

/******************************************************************************/
/*                             Colored Boxes                                  */
/******************************************************************************/

	.issue, .note, .example, .assertion, .advisement, blockquote,
	.amendment, .correction, .addition {
		margin: 1em auto;
		padding: .5em;
		border: .5em;
		border-left-style: solid;
		page-break-inside: avoid;
	}
	span.issue, span.note {
		padding: .1em .5em .15em;
		border-right-style: solid;
	}

	blockquote > :first-child,
	.note  > p:first-child,
	.issue > p:first-child,
	.amendment > p:first-child,
	.correction > p:first-child,
	.addition > p:first-child {
		margin-top: 0;
	}
	blockquote > :last-child,
	.note  > p:last-child,
	.issue > p:last-child,
	.amendment > p:last-child,
	.correction > p:last-child,
	.addition > p:last-child {
		margin-bottom: 0;
	}


	.issue::before, .issue > .marker,
	.example::before, .example > .marker,
	.note::before, .note > .marker,
	details.note > summary > .marker,
	.amendment::before, .amendment > .marker,
	details.amendment > summary > .marker,
	.addition::before, .addition > .marker,
	addition.amendment > summary > .marker,
	.correction::before, .correction > .marker,
	correction.amendment > summary > .marker
	{
		text-transform: uppercase;
		padding-right: 1em;
	}

	.example::before, .example > .marker {
		display: block;
		padding-right: 0em;
	}

/** Blockquotes ***************************************************************/

	blockquote {
		border-color: silver;
		border-color: var(--blockquote-border);
		background: transparent;
		background: var(--blockquote-bg);
		color: currentcolor;
		color: var(--blockquote-text);
	}

/** Open issue ****************************************************************/

	.issue {
		border-color: #e05252;
		border-color: var(--issue-border);
		background: #fbe9e9;
		background: var(--issue-bg);
		color: black;
		color: var(--issue-text);
		counter-increment: issue;
		overflow: auto;
	}
	.issue::before, .issue > .marker {
		color: #831616;
		color: var(--issueheading-text);
	}
	/* Add .issue::before { content: "Issue " counter(issue) " "; } for autogen numbers,
	  or use class="marker" to mark up the issue number in source. */

/** Example *******************************************************************/

	.example {
		border-color: #e0cb52;
		border-color: var(--example-border);
		background: #fcfaee;
		background: var(--example-bg);
		color: black;
		color: var(--example-text);
		counter-increment: example;
		overflow: auto;
		clear: both;
	}
	.example::before, .example > .marker {
		color: #574b0f;
		color: var(--exampleheading-text);
	}
	/* Add .example::before { content: "Example " counter(example) " "; } for autogen numbers,
	  or use class="marker" to mark up the example number in source. */

/** Non-normative Note ********************************************************/

	.note {
		border-color: #52e052;
		border-color: var(--note-border);
		background: #e9fbe9;
		background: var(--note-bg);
		color: black;
		color: var(--note-text);
		overflow: auto;
	}

	.note::before, .note > .marker,
	details.note > summary {
		color: hsl(120, 70%, 30%);
		color: var(--noteheading-text);
	}
	/* Add .note::before { content: "Note "; } for autogen label,
	  or use class="marker" to mark up the label in source. */

	details.note[open] > summary {
		border-bottom: 1px silver solid;
		border-bottom: 1px var(--notesummary-underline) solid;
	}

/** Assertion Box *************************************************************/
	/*  for assertions in algorithms */

	.assertion {
		border-color: #AAA;
		border-color: var(--assertion-border);
		background: #EEE;
		background: var(--assertion-bg);
		color: black;
		color: var(--assertion-text);
	}

/** Advisement Box ************************************************************/
	/*  for attention-grabbing normative statements */

	.advisement {
		border-color: orange;
		border-color: var(--advisement-border);
		border-style: none solid;
		background: #fec;
		background: var(--advisement-bg);
		color: black;
		color: var(--advisement-text);
	}
	strong.advisement {
		display: block;
		text-align: center;
	}
	.advisement::before, .advisement > .marker {
		color: #b35f00;
		color: var(--advisementheading-text);
	}

/** Amendment Box *************************************************************/

	.amendment, .correction, .addition {
		border-color: #330099;
		border-color: var(--amendment-border);
		background: #F5F0FF;
		background: var(--amendment-bg);
		color: black;
		color: var(--amendment-text);
	}
	.amendment.proposed, .correction.proposed, .addition.proposed {
		border-style: solid;
		border-block-width: 0.25em;
	}
	.amendment::before, .amendment > .marker,
	details.amendment > summary::before, details.amendment > summary > .marker,
	.correction::before, .correction > .marker,
	details.correction > summary::before, details.correction > summary > .marker,
	.addition::before, .addition > .marker,
	details.addition > summary::before, details.addition > summary > .marker {
		color: #220066;
		color: var(--amendmentheading-text);
	}
	.amendment.proposed::before, .amendment.proposed > .marker,
	details.amendment.proposed > summary::before, details.amendment.proposed > summary > .marker,
	.correction.proposed::before, .correction.proposed > .marker,
	details.correction.proposed > summary::before, details.correction.proposed > summary > .marker,
	.addition.proposed::before, .addition.proposed > .marker,
	details.addition.proposed > summary::before, details.addition.proposed > summary > .marker {
		font-weight: bold;
	}

/** Spec Obsoletion Notice ****************************************************/
	/* obnoxious obsoletion notice for older/abandoned specs. */

	details {
		display: block;
	}
	summary {
		font-weight: bolder;
	}

	.annoying-warning:not(details),
	details.annoying-warning:not([open]) > summary,
	details.annoying-warning[open] {
		background: hsla(40,100%,50%,0.95);
		background: var(--warning-bg);
		color: black;
		color: var(--warning-text);
		padding: .75em 1em;
		border: red;
		border: var(--warning-border);
		border-style: solid none;
		box-shadow: 0 2px 8px black;
		text-align: center;
	}
	.annoying-warning :last-child {
		margin-bottom: 0;
	}

@media not print {
	details.annoying-warning[open] {
		position: fixed;
		left: 0;
		right: 0;
		bottom: 2em;
		z-index: 1000;
	}
}

	details.annoying-warning:not([open]) > summary {
		text-align: center;
	}

/** Entity Definition Boxes ***************************************************/

	.def {
		padding: .5em 1em;
		background: #def;
		background: var(--def-bg);
		margin: 1.2em 0;
		border-left: 0.5em solid #8ccbf2;
		border-left: 0.5em solid var(--def-border);
		color: black;
		color: var(--def-text);
	}

/******************************************************************************/
/*                                    Tables                                  */
/******************************************************************************/

	th, td {
		text-align: left;
		text-align: start;
	}

/** Property/Descriptor Definition Tables *************************************/

	table.def {
		/* inherits .def box styling, see above */
		width: 100%;
		border-spacing: 0;
	}

	table.def td,
	table.def th {
		padding: 0.5em;
		vertical-align: baseline;
		border-bottom: 1px solid #bbd7e9;
		border-bottom: 1px solid var(--defrow-border);
	}

	table.def > tbody > tr:last-child th,
	table.def > tbody > tr:last-child td {
		border-bottom: 0;
	}

	table.def th {
		font-style: italic;
		font-weight: normal;
		padding-left: 1em;
		width: 3em;
	}

	/* For when values are extra-complex and need formatting for readability */
	table td.pre {
		white-space: pre-wrap;
	}

	/* A footnote at the bottom of a def table */
	table.def td.footnote {
		padding-top: 0.6em;
	}
	table.def td.footnote::before {
		content: " ";
		display: block;
		height: 0.6em;
		width: 4em;
		border-top: thin solid;
	}

/** Data tables (and properly marked-up index tables) *************************/
	/*
		<table class="data"> highlights structural relationships in a table
		when correct markup is used (e.g. thead/tbody, th vs. td, scope attribute)

		Use class="complex data" for particularly complicated tables --
		(This will draw more lines: busier, but clearer.)

		Use class="long" on table cells with paragraph-like contents
		(This will adjust text alignment accordingly.)
		Alternately use class="longlastcol" on tables, to have the last column assume "long".
	*/

	table {
		word-wrap: normal;
		overflow-wrap: normal;
		hyphens: manual;
	}

	table.data,
	table.index {
		margin: 1em auto;
		border-collapse: collapse;
		border: hidden;
		width: 100%;
	}
	table.data caption,
	table.index caption {
		max-width: 50em;
		margin: 0 auto 1em;
	}

	table.data td,  table.data th,
	table.index td, table.index th {
		padding: 0.5em 1em;
		border-width: 1px;
		border-color: silver;
		border-color: var(--datacell-border);
		border-top-style: solid;
	}

	table.data thead td:empty {
		padding: 0;
		border: 0;
	}

	table.data  thead,
	table.index thead,
	table.data  tbody,
	table.index tbody {
		border-bottom: 2px solid;
	}

	table.data colgroup,
	table.index colgroup {
		border-left: 2px solid;
	}

	table.data  tbody th:first-child,
	table.index tbody th:first-child  {
		border-right: 2px solid;
		border-top: 1px solid silver;
		border-top: 1px solid var(--datacell-border);
		padding-right: 1em;
	}

	table.data th[colspan],
	table.data td[colspan] {
		text-align: center;
	}

	table.complex.data th,
	table.complex.data td {
		border: 1px solid silver;
		border: 1px solid var(--datacell-border);
		text-align: center;
	}

	table.data.longlastcol td:last-child,
	table.data td.long {
		vertical-align: baseline;
		text-align: left;
	}

	table.data img {
		vertical-align: middle;
	}


/*
Alternate table alignment rules

	table.data,
	table.index {
		text-align: center;
	}

	table.data  thead th[scope="row"],
	table.index thead th[scope="row"] {
		text-align: right;
	}

	table.data  tbody th:first-child,
	table.index tbody th:first-child  {
		text-align: right;
	}

Possible extra rowspan handling

	table.data  tbody th[rowspan]:not([rowspan='1']),
	table.index tbody th[rowspan]:not([rowspan='1']),
	table.data  tbody td[rowspan]:not([rowspan='1']),
	table.index tbody td[rowspan]:not([rowspan='1']) {
		border-left: 1px solid silver;
	}

	table.data  tbody th[rowspan]:first-child,
	table.index tbody th[rowspan]:first-child,
	table.data  tbody td[rowspan]:first-child,
	table.index tbody td[rowspan]:first-child{
		border-left: 0;
		border-right: 1px solid silver;
	}
*/

/******************************************************************************/
/*                                  Indices                                   */
/******************************************************************************/


/** Table of Contents *********************************************************/

	.toc a {
		/* More spacing; use padding to make it part of the click target. */
		padding: 0.1rem 1px 0;
		/* Larger, more consistently-sized click target */
		display: block;
		/* Switch to using border-bottom for underlines */
		text-decoration: none;
		border-bottom: 1px solid;
		/* Reverse color scheme */
		color: black;
		color: var(--toclink-text);
		border-color: #3980b5;
		border-color: var(--toclink-underline);
	}
	.toc a:visited {
		color: black;
		color: var(--toclink-visited-text);
		border-color: #054572;
		border-color: var(--toclink-visited-underline);
	}
	.toc a:focus,
	.toc a:hover {
		background: rgba(75%, 75%, 75%, .25);
		background: var(--a-hover-bg);
		border-bottom-width: 3px;
		margin-bottom: -2px;
	}
	.toc a:not(:focus):not(:hover) {
		/* Allow colors to cascade through from link styling */
		border-bottom-color: transparent;
	}

	.toc, .toc ol, .toc ul, .toc li {
		list-style: none; /* Numbers must be inlined into source */
		/* because generated content isn't search/selectable and markers can't do multilevel yet */
		margin:  0;
		padding: 0;
	}
	.toc {
		line-height: 1.1em;
	}

	/* ToC not indented until third level, but font style & margins show hierarchy */
	.toc > li			{ font-weight: bold;   }
	.toc > li li		 { font-weight: normal; }
	.toc > li li li	  { font-size:   95%;	}
	.toc > li li li li	{ font-size:   90%;	}
	.toc > li li li li li { font-size:   85%;	}

	/* @supports not (display:grid) { */
		.toc > li			{ margin: 1.5rem 0;	}
		.toc > li li		 { margin: 0.3rem 0;	}
		.toc > li li li	  { margin-left: 2rem;   }

		/* Section numbers in a column of their own */
		.toc .secno {
			float: left;
			width: 4rem;
			white-space: nowrap;
		}
		.toc > li li li li .secno { font-size: 85%; }
		.toc > li li li li li .secno { font-size: 100%; }

		.toc li {
			clear: both;
		}

		:not(li) > .toc			 { margin-left:  5rem; }
		.toc .secno				 { margin-left: -5rem; }
		.toc > li li li .secno	  { margin-left: -7rem; }
		.toc > li li li li .secno	{ margin-left: -9rem; }
		.toc > li li li li li .secno { margin-left: -11rem; }

		/* Tighten up indentation in narrow ToCs */
		@media (max-width: 30em) {
			:not(li) > .toc			 { margin-left:  4rem; }
			.toc .secno				 { margin-left: -4rem; }
			.toc > li li li			 { margin-left:  1rem; }
			.toc > li li li .secno	  { margin-left: -5rem; }
			.toc > li li li li .secno	{ margin-left: -6rem; }
			.toc > li li li li li .secno { margin-left: -7rem; }
		}
		/* Loosen it on wide screens */
		@media screen and (min-width: 78em) {
			body:not(.toc-inline) :not(li) > .toc			 { margin-left:  4rem; }
			body:not(.toc-inline) .toc .secno				 { margin-left: -4rem; }
			body:not(.toc-inline) .toc > li li li			 { margin-left:  1rem; }
			body:not(.toc-inline) .toc > li li li .secno	  { margin-left: -5rem; }
			body:not(.toc-inline) .toc > li li li li .secno	{ margin-left: -6rem; }
			body:not(.toc-inline) .toc > li li li li li .secno { margin-left: -7rem; }
	}
	/* } */

	@supports (display:grid) and (display:contents) {
		/* Use #toc over .toc to override non-@supports rules. */
		#toc {
			display: grid;
			align-content: start;
			grid-template-columns: auto 1fr;
			grid-column-gap: 1rem;
			column-gap: 1rem;
			grid-row-gap: .6rem;
			row-gap: .6rem;
		}
		#toc h2 {
			grid-column: 1 / -1;
			margin-bottom: 0;
		}
		#toc ol,
		#toc li,
		#toc a {
			display: contents;
			/* Switch <a> to subgrid when supported */
		}
		#toc span {
			margin: 0;
		}
		#toc > .toc > li > a > span {
			/* The spans of the top-level list,
			  comprising the first items of each top-level section. */
			margin-top: 1.1rem;
		}
		#toc#toc .secno { /* Ugh, need more specificity to override base.css */
			grid-column: 1;
			width: auto;
			margin-left: 0;
		}
		#toc .content {
			grid-column: 2;
			width: auto;
			margin-right: 1rem;
			border-bottom: 3px solid transparent;
			margin-bottom: -3px;
		}
		#toc .content:hover,
		#toc .content:focus {
			background: rgba(75%, 75%, 75%, .25);
			background: var(--a-hover-bg);
			border-bottom-color: #054572;
			border-bottom-color: var(--toclink-underline);
		}
		#toc li li li .content {
			margin-left: 1rem;
		}
		#toc li li li li .content {
			margin-left: 2rem;
		}
	}


/** Index *********************************************************************/

	/* Index Lists: Layout */
	ul.index	  { margin-left: 0; columns: 15em; text-indent: 1em hanging; }
	ul.index li	{ margin-left: 0; list-style: none; break-inside: avoid; }
	ul.index li li { margin-left: 1em; }
	ul.index dl	{ margin-top: 0; }
	ul.index dt	{ margin: .2em 0 .2em 20px;}
	ul.index dd	{ margin: .2em 0 .2em 40px;}
	/* Index Lists: Typography */
	ul.index ul,
	ul.index dl { font-size: smaller; }
	@media not print {
		ul.index li a + span {
			white-space: nowrap;
			color: transparent; }
		ul.index li a:hover + span,
		ul.index li a:focus + span {
			color: #707070;
			color: var(--indexinfo-text);
		}
	}

/** Index Tables *****************************************************/
	/* See also the data table styling section, which this effectively subclasses */

	table.index {
		font-size: small;
		border-collapse: collapse;
		border-spacing: 0;
		text-align: left;
		margin: 1em 0;
	}

	table.index td,
	table.index th {
		padding: 0.4em;
	}

	table.index tr:hover td:not([rowspan]),
	table.index tr:hover th:not([rowspan]) {
		color: black;
		color: var(--indextable-hover-text);
		background: #f7f8f9;
		background: var(--indextable-hover-bg);
	}

	/* The link in the first column in the property table (formerly a TD) */
	table.index th:first-child a {
		font-weight: bold;
	}

/** Outdated warning **********************************************************/

.outdated-spec {
	color: black;
	color: var(--outdatedspec-text);
	background-color: rgba(0,0,0,0.5);
	background-color: var(--outdatedspec-bg);
}

.outdated-warning {
	position: fixed;
	bottom: 50%;
	left: 0;
	right: 0;
	margin: 0 auto;
	width: 50%;
	background: maroon;
	background: var(--outdated-bg);
	color: white;
	color: var(--outdated-text);
	border-radius: 1em;
	box-shadow: 0 0 1em red;
	box-shadow: 0 0 1em var(--outdated-shadow);
	padding: 2em;
	text-align: center;
	z-index: 2;
}

.outdated-warning a {
	color: currentcolor;
	background: transparent;
}

.edited-rec-warning {
	background: darkorange;
	background: var(--editedrec-bg);
	box-shadow: 0 0 1em;
}

.outdated-warning button {
	color: var(--outdated-text);
	border-radius: 1em;
	box-shadow: 0 0 1em red;
	box-shadow: 0 0 1em var(--outdated-shadow);
	padding: 2em;
	text-align: center;
	z-index: 2;
}

.outdated-warning a {
	color: currentcolor;
	background: transparent;
}

.edited-rec-warning {
	background: darkorange;
	background: var(--editedrec-bg);
	box-shadow: 0 0 1em;
}

.outdated-warning button {
	position: absolute;
	top: 0;
	right:0;
	margin: 0;
	border: 0;
	padding: 0.25em 0.5em;
	background: transparent;
	color: white;
	color: var(--outdated-text);
	font:1em sans-serif;
	text-align:center;
}

.outdated-warning span {
	display: block;
}

.outdated-collapsed {
	bottom: 0;
	border-radius: 0;
	width: 100%;
	padding: 0;
}

/******************************************************************************/
/*                                    Print                                   */
/******************************************************************************/

	@media print {
		/* Pages have their own margins. */
		html {
			margin: 0;
		}
		/* Serif for print. */
		body {
			font-family: serif;
		}

		.outdated-warning {
			position: absolute;
			border-style: solid;
			border-color: red;
		}

		.outdated-warning input {
			display: none;
		}
	}
	@page {
		margin: 1.5cm 1.1cm;
	}



/******************************************************************************/
/*                             Overflow Control                               */
/******************************************************************************/

	.figure .caption, .sidefigure .caption, figcaption {
		/* in case figure is overlarge, limit caption to 50em */
		max-width: 50rem;
		margin-left: auto;
		margin-right: auto;
	}
	.overlarge {
		/* Magic to create good item positioning:
		  "content column" is 50ems wide at max; less on smaller screens.
		  Extra space (after ToC + content) is empty on the right.

		  1. When item < content column, centers item in column.
		  2. When content < item < available, left-aligns.
		  3. When item > available, fills available + scroll bar.
		*/
		display: grid;
		grid-template-columns: minmax(0, 50em);
	}
	.overlarge > table {
		/* limit preferred width of table */
		max-width: 50em;
		margin-left: auto;
		margin-right: auto;
	}

	@media (min-width: 55em) {
		.overlarge {
			margin-right: calc(13px + 26.5rem - 50vw);
			max-width: none;
		}
	}
	@media screen and (min-width: 78em) {
		body:not(.toc-inline) .overlarge {
			/* 30.5em body padding 50em content area */
			margin-right: calc(40em - 50vw) !important;
		}
	}
	@media screen and (min-width: 90em) {
		body:not(.toc-inline) .overlarge {
			/* 4em html margin 30.5em body padding 50em content area */
			margin-right: calc(84.5em - 100vw) !important;
		}
	}

	@media not print {
		.overlarge {
			overflow-x: auto;
			/* See Lea Verou's explanation background-attachment:
			* http://lea.verou.me/2012/04/background-attachment-local/
			*
			background: top left  / 4em 100% linear-gradient(to right,  #ffffff, rgba(255, 255, 255, 0)) local,
						top right / 4em 100% linear-gradient(to left, #ffffff, rgba(255, 255, 255, 0)) local,
						top left  / 1em 100% linear-gradient(to right,  #c3c3c5, rgba(195, 195, 197, 0)) scroll,
						top right / 1em 100% linear-gradient(to left, #c3c3c5, rgba(195, 195, 197, 0)) scroll,
						white;
			background-repeat: no-repeat;
			*/
		}
	}
</style>
<style>
    table, th, td {
      border: 1px solid black;
      border-collapse: collapse;
      vertical-align: top;
    }
    th, td {
      border-left: none;
      border-right: none;
      padding: 0px 10px;
    }
    th {
      text-align: center;
    }

    del { background: #fcc; color: #000; text-decoration: line-through; }
    ins { background: #cfc; color: #000; }
    blockquote .highlight:not(.idl) { background: initial; margin: initial; padding: 0.5em }
    blockquote ul { background: inherit; }
    blockquote code.highlight:not(.idl) { padding: initial; }
    blockquote c-[a] { color: inherit; } /* Keyword.Declaration */
    blockquote c-[b] { color: inherit; } /* Keyword.Type */
    blockquote c-[c] { color: inherit; } /* Comment */
    blockquote c-[d] { color: inherit; } /* Comment.Multiline */
    blockquote c-[e] { color: inherit; } /* Name.Attribute */
    blockquote c-[f] { color: inherit; } /* Name.Tag */
    blockquote c-[g] { color: inherit; } /* Name.Variable */
    blockquote c-[k] { color: inherit; } /* Keyword */
    blockquote c-[l] { color: inherit; } /* Literal */
    blockquote c-[m] { color: inherit; } /* Literal.Number */
    blockquote c-[n] { color: inherit; } /* Name */
    blockquote c-[o] { color: inherit; } /* Operator */
    blockquote c-[p] { color: inherit; } /* Punctuation */
    blockquote c-[s] { color: inherit; } /* Literal.String */
    blockquote c-[t] { color: inherit; } /* Literal.String.Single */
    blockquote c-[u] { color: inherit; } /* Literal.String.Double */
    blockquote c-[cp] { color: inherit; } /* Comment.Preproc */
    blockquote c-[c1] { color: inherit; } /* Comment.Single */
    blockquote c-[cs] { color: inherit; } /* Comment.Special */
    blockquote c-[kc] { color: inherit; } /* Keyword.Constant */
    blockquote c-[kn] { color: inherit; } /* Keyword.Namespace */
    blockquote c-[kp] { color: inherit; } /* Keyword.Pseudo */
    blockquote c-[kr] { color: inherit; } /* Keyword.Reserved */
    blockquote c-[ld] { color: inherit; } /* Literal.Date */
    blockquote c-[nc] { color: inherit; } /* Name.Class */
    blockquote c-[no] { color: inherit; } /* Name.Constant */
    blockquote c-[nd] { color: inherit; } /* Name.Decorator */
    blockquote c-[ni] { color: inherit; } /* Name.Entity */
    blockquote c-[ne] { color: inherit; } /* Name.Exception */
    blockquote c-[nf] { color: inherit; } /* Name.Function */
    blockquote c-[nl] { color: inherit; } /* Name.Label */
    blockquote c-[nn] { color: inherit; } /* Name.Namespace */
    blockquote c-[py] { color: inherit; } /* Name.Property */
    blockquote c-[ow] { color: inherit; } /* Operator.Word */
    blockquote c-[mb] { color: inherit; } /* Literal.Number.Bin */
    blockquote c-[mf] { color: inherit; } /* Literal.Number.Float */
    blockquote c-[mh] { color: inherit; } /* Literal.Number.Hex */
    blockquote c-[mi] { color: inherit; } /* Literal.Number.Integer */
    blockquote c-[mo] { color: inherit; } /* Literal.Number.Oct */
    blockquote c-[sb] { color: inherit; } /* Literal.String.Backtick */
    blockquote c-[sc] { color: inherit; } /* Literal.String.Char */
    blockquote c-[sd] { color: inherit; } /* Literal.String.Doc */
    blockquote c-[se] { color: inherit; } /* Literal.String.Escape */
    blockquote c-[sh] { color: inherit; } /* Literal.String.Heredoc */
    blockquote c-[si] { color: inherit; } /* Literal.String.Interpol */
    blockquote c-[sx] { color: inherit; } /* Literal.String.Other */
    blockquote c-[sr] { color: inherit; } /* Literal.String.Regex */
    blockquote c-[ss] { color: inherit; } /* Literal.String.Symbol */
    blockquote c-[vc] { color: inherit; } /* Name.Variable.Class */
    blockquote c-[vg] { color: inherit; } /* Name.Variable.Global */
    blockquote c-[vi] { color: inherit; } /* Name.Variable.Instance */
    blockquote c-[il] { color: inherit; } /* Literal.Number.Integer.Long */
  </style>
  <meta content="Bikeshed version 6270e4735, updated Tue Aug 6 12:12:30 2024 -0700" name="generator">
  <link href="http://wg21.link/P2079R8" rel="canonical">
  <link href="https://isocpp.org/favicon.ico" rel="icon">
  <meta content="53bcd29e85cf9cc19398cef4b785531dbd9706fe" name="revision">
  <meta content="dark light" name="color-scheme">
<style>
div.ed-note, span.ed-note {
  color: light-dark(blue, lightblue) !important;
  font: initial;
  font-family: sans-serif;
}
div.ed-note:before, span.ed-note:before {
  content: "[Editorial note: ";
  font-style: italic;
}
div.ed-note:after, span.ed-note:after {
  content: " — end note]";
  font-style: italic;
}
div.enote, span.enote {
}
div.enote:before, span.enote:before {
  content: "[Note: ";
  font-style: italic;
}
div.enote:after, span.enote:after {
  content: " — end note]";
  font-style: italic;
}
.ins, ins, ins *, span.ins, span.ins * {
  background-color: light-dark(#cfc, hsl(120, 100.00%, 15%));
  color: light-dark(#000, #ddd);
  text-decoration: none;
}
.del, del, del *, span.del, span.del * {
  background-color: light-dark(#fcc,hsl(0, 100.00%, 20%));
  color: light-dark(#000, #ddd);
  text-decoration: line-through;
  text-decoration-color: #c00;
}
div.ed-note *, span.ed-note * {
  color: blue !important;
  margin-top: 0em;
  margin-bottom: 0em;
}
div.ed-note blockquote {
  margin-left: 2em;
}
div.block-insert, div.block-insert {
  background-color: light-dark(#cfc, hsl(120, 100.00%, 15%));
  padding-left: 0;
  padding-right: 1.6em;
}
div.block-insert pre.highlight {
  background-color: transparent;
}
</style>
<style>/* Boilerplate: style-autolinks */
.css.css, .property.property, .descriptor.descriptor {
    color: var(--a-normal-text);
    font-size: inherit;
    font-family: inherit;
}
.css::before, .property::before, .descriptor::before {
    content: "‘";
}
.css::after, .property::after, .descriptor::after {
    content: "’";
}
.property, .descriptor {
    /* Don't wrap property and descriptor names */
    white-space: nowrap;
}
.type { /* CSS value <type> */
    font-style: italic;
}
pre .property::before, pre .property::after {
    content: "";
}
[data-link-type="property"]::before,
[data-link-type="propdesc"]::before,
[data-link-type="descriptor"]::before,
[data-link-type="value"]::before,
[data-link-type="function"]::before,
[data-link-type="at-rule"]::before,
[data-link-type="selector"]::before,
[data-link-type="maybe"]::before {
    content: "‘";
}
[data-link-type="property"]::after,
[data-link-type="propdesc"]::after,
[data-link-type="descriptor"]::after,
[data-link-type="value"]::after,
[data-link-type="function"]::after,
[data-link-type="at-rule"]::after,
[data-link-type="selector"]::after,
[data-link-type="maybe"]::after {
    content: "’";
}

[data-link-type].production::before,
[data-link-type].production::after,
.prod [data-link-type]::before,
.prod [data-link-type]::after {
    content: "";
}

[data-link-type=element],
[data-link-type=element-attr] {
    font-family: Menlo, Consolas, "DejaVu Sans Mono", monospace;
    font-size: .9em;
}
[data-link-type=element]::before { content: "<" }
[data-link-type=element]::after  { content: ">" }

[data-link-type=biblio] {
    white-space: pre;
}

@media (prefers-color-scheme: dark) {
    :root {
        --selflink-text: black;
        --selflink-bg: silver;
        --selflink-hover-text: white;
    }
}
</style>
<style>/* Boilerplate: style-colors */
/* Any --*-text not paired with a --*-bg is assumed to have a transparent bg */
:root {
    color-scheme: light dark;

    --text: black;
    --bg: white;

    --unofficial-watermark: url(https://www.w3.org/StyleSheets/TR/2016/logos/UD-watermark);

    --logo-bg: #1a5e9a;
    --logo-active-bg: #c00;
    --logo-text: white;

    --tocnav-normal-text: #707070;
    --tocnav-normal-bg: var(--bg);
    --tocnav-hover-text: var(--tocnav-normal-text);
    --tocnav-hover-bg: #f8f8f8;
    --tocnav-active-text: #c00;
    --tocnav-active-bg: var(--tocnav-normal-bg);

    --tocsidebar-text: var(--text);
    --tocsidebar-bg: #f7f8f9;
    --tocsidebar-shadow: rgba(0,0,0,.1);
    --tocsidebar-heading-text: hsla(203,20%,40%,.7);

    --toclink-text: var(--text);
    --toclink-underline: #3980b5;
    --toclink-visited-text: var(--toclink-text);
    --toclink-visited-underline: #054572;

    --heading-text: #005a9c;

    --hr-text: var(--text);

    --algo-border: #def;

    --del-text: red;
    --del-bg: transparent;
    --ins-text: #080;
    --ins-bg: transparent;

    --a-normal-text: #034575;
    --a-normal-underline: #bbb;
    --a-visited-text: var(--a-normal-text);
    --a-visited-underline: #707070;
    --a-hover-bg: rgba(75%, 75%, 75%, .25);
    --a-active-text: #c00;
    --a-active-underline: #c00;

    --blockquote-border: silver;
    --blockquote-bg: transparent;
    --blockquote-text: currentcolor;

    --issue-border: #e05252;
    --issue-bg: #fbe9e9;
    --issue-text: var(--text);
    --issueheading-text: #831616;

    --example-border: #e0cb52;
    --example-bg: #fcfaee;
    --example-text: var(--text);
    --exampleheading-text: #574b0f;

    --note-border: #52e052;
    --note-bg: #e9fbe9;
    --note-text: var(--text);
    --noteheading-text: hsl(120, 70%, 30%);
    --notesummary-underline: silver;

    --assertion-border: #aaa;
    --assertion-bg: #eee;
    --assertion-text: black;

    --advisement-border: orange;
    --advisement-bg: #fec;
    --advisement-text: var(--text);
    --advisementheading-text: #b35f00;

    --warning-border: red;
    --warning-bg: hsla(40,100%,50%,0.95);
    --warning-text: var(--text);

    --amendment-border: #330099;
    --amendment-bg: #F5F0FF;
    --amendment-text: var(--text);
    --amendmentheading-text: #220066;

    --def-border: #8ccbf2;
    --def-bg: #def;
    --def-text: var(--text);
    --defrow-border: #bbd7e9;

    --datacell-border: silver;

    --indexinfo-text: #707070;

    --indextable-hover-text: black;
    --indextable-hover-bg: #f7f8f9;

    --outdatedspec-bg: rgba(0, 0, 0, .5);
    --outdatedspec-text: black;
    --outdated-bg: maroon;
    --outdated-text: white;
    --outdated-shadow: red;

    --editedrec-bg: darkorange;
}

@media (prefers-color-scheme: dark) {
    :root {
        --text: #ddd;
        --bg: black;

        --unofficial-watermark: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='400' height='400'%3E%3Cg fill='%23100808' transform='translate(200 200) rotate(-45) translate(-200 -200)' stroke='%23100808' stroke-width='3'%3E%3Ctext x='50%25' y='220' style='font: bold 70px sans-serif; text-anchor: middle; letter-spacing: 6px;'%3EUNOFFICIAL%3C/text%3E%3Ctext x='50%25' y='305' style='font: bold 70px sans-serif; text-anchor: middle; letter-spacing: 6px;'%3EDRAFT%3C/text%3E%3C/g%3E%3C/svg%3E");

        --logo-bg: #1a5e9a;
        --logo-active-bg: #c00;
        --logo-text: white;

        --tocnav-normal-text: #999;
        --tocnav-normal-bg: var(--bg);
        --tocnav-hover-text: var(--tocnav-normal-text);
        --tocnav-hover-bg: #080808;
        --tocnav-active-text: #f44;
        --tocnav-active-bg: var(--tocnav-normal-bg);

        --tocsidebar-text: var(--text);
        --tocsidebar-bg: #080808;
        --tocsidebar-shadow: rgba(255,255,255,.1);
        --tocsidebar-heading-text: hsla(203,20%,40%,.7);

        --toclink-text: var(--text);
        --toclink-underline: #6af;
        --toclink-visited-text: var(--toclink-text);
        --toclink-visited-underline: #054572;

        --heading-text: #8af;

        --hr-text: var(--text);

        --algo-border: #456;

        --del-text: #f44;
        --del-bg: transparent;
        --ins-text: #4a4;
        --ins-bg: transparent;

        --a-normal-text: #6af;
        --a-normal-underline: #555;
        --a-visited-text: var(--a-normal-text);
        --a-visited-underline: var(--a-normal-underline);
        --a-hover-bg: rgba(25%, 25%, 25%, .2);
        --a-active-text: #f44;
        --a-active-underline: var(--a-active-text);

        --borderedblock-bg: rgba(255, 255, 255, .05);

        --blockquote-border: silver;
        --blockquote-bg: var(--borderedblock-bg);
        --blockquote-text: currentcolor;

        --issue-border: #e05252;
        --issue-bg: var(--borderedblock-bg);
        --issue-text: var(--text);
        --issueheading-text: hsl(0deg, 70%, 70%);

        --example-border: hsl(50deg, 90%, 60%);
        --example-bg: var(--borderedblock-bg);
        --example-text: var(--text);
        --exampleheading-text: hsl(50deg, 70%, 70%);

        --note-border: hsl(120deg, 100%, 35%);
        --note-bg: var(--borderedblock-bg);
        --note-text: var(--text);
        --noteheading-text: hsl(120, 70%, 70%);
        --notesummary-underline: silver;

        --assertion-border: #444;
        --assertion-bg: var(--borderedblock-bg);
        --assertion-text: var(--text);

        --advisement-border: orange;
        --advisement-bg: #222218;
        --advisement-text: var(--text);
        --advisementheading-text: #f84;

        --warning-border: red;
        --warning-bg: hsla(40,100%,20%,0.95);
        --warning-text: var(--text);

        --amendment-border: #330099;
        --amendment-bg: #080010;
        --amendment-text: var(--text);
        --amendmentheading-text: #cc00ff;

        --def-border: #8ccbf2;
        --def-bg: #080818;
        --def-text: var(--text);
        --defrow-border: #136;

        --datacell-border: silver;

        --indexinfo-text: #aaa;

        --indextable-hover-text: var(--text);
        --indextable-hover-bg: #181818;

        --outdatedspec-bg: rgba(255, 255, 255, .5);
        --outdatedspec-text: black;
        --outdated-bg: maroon;
        --outdated-text: white;
        --outdated-shadow: red;

        --editedrec-bg: darkorange;
    }
    /* In case a transparent-bg image doesn't expect to be on a dark bg,
       which is quite common in practice... */
    img { background: white; }
}
</style>
<style>/* Boilerplate: style-counters */
body {
    counter-reset: example figure issue;
}
.issue {
    counter-increment: issue;
}
.issue:not(.no-marker)::before {
    content: "Issue " counter(issue);
}

.example {
    counter-increment: example;
}
.example:not(.no-marker)::before {
    content: "Example " counter(example);
}
.invalid.example:not(.no-marker)::before,
.illegal.example:not(.no-marker)::before {
    content: "Invalid Example" counter(example);
}

figcaption {
    counter-increment: figure;
}
figcaption:not(.no-marker)::before {
    content: "Figure " counter(figure) " ";
}
</style>
<style>/* Boilerplate: style-issues */
a[href].issue-return {
    float: right;
    float: inline-end;
    color: var(--issueheading-text);
    font-weight: bold;
    text-decoration: none;
}
</style>
<style>/* Boilerplate: style-md-lists */
/* This is a weird hack for me not yet following the commonmark spec
   regarding paragraph and lists. */
[data-md] > :first-child {
    margin-top: 0;
}
[data-md] > :last-child {
    margin-bottom: 0;
}
</style>
<style>/* Boilerplate: style-selflinks */
:root {
    --selflink-text: white;
    --selflink-bg: gray;
    --selflink-hover-text: black;
}
.heading, .issue, .note, .example, li, dt {
    position: relative;
}
a.self-link {
    position: absolute;
    top: 0;
    left: calc(-1 * (3.5rem - 26px));
    width: calc(3.5rem - 26px);
    height: 2em;
    text-align: center;
    border: none;
    transition: opacity .2s;
    opacity: .5;
}
a.self-link:hover {
    opacity: 1;
}
.heading > a.self-link {
    font-size: 83%;
}
.example > a.self-link,
.note > a.self-link,
.issue > a.self-link {
    /* These blocks are overflow:auto, so positioning outside
       doesn't work. */
    left: auto;
    right: 0;
}
li > a.self-link {
    left: calc(-1 * (3.5rem - 26px) - 2em);
}
dfn > a.self-link {
    top: auto;
    left: auto;
    opacity: 0;
    width: 1.5em;
    height: 1.5em;
    background: var(--selflink-bg);
    color: var(--selflink-text);
    font-style: normal;
    transition: opacity .2s, background-color .2s, color .2s;
}
dfn:hover > a.self-link {
    opacity: 1;
}
dfn > a.self-link:hover {
    color: var(--selflink-hover-text);
}

a.self-link::before            { content: "¶"; }
.heading > a.self-link::before { content: "§"; }
dfn > a.self-link::before      { content: "#"; }
</style>
<style>/* Boilerplate: style-syntax-highlighting */
code.highlight { padding: .1em; border-radius: .3em; }
pre.highlight, pre > code.highlight { display: block; padding: 1em; margin: .5em 0; overflow: auto; border-radius: 0; }

.highlight:not(.idl) { background: rgba(0, 0, 0, .03); }
c-[a] { color: #990055 } /* Keyword.Declaration */
c-[b] { color: #990055 } /* Keyword.Type */
c-[c] { color: #708090 } /* Comment */
c-[d] { color: #708090 } /* Comment.Multiline */
c-[e] { color: #0077aa } /* Name.Attribute */
c-[f] { color: #669900 } /* Name.Tag */
c-[g] { color: #222222 } /* Name.Variable */
c-[k] { color: #990055 } /* Keyword */
c-[l] { color: #000000 } /* Literal */
c-[m] { color: #000000 } /* Literal.Number */
c-[n] { color: #0077aa } /* Name */
c-[o] { color: #999999 } /* Operator */
c-[p] { color: #999999 } /* Punctuation */
c-[s] { color: #a67f59 } /* Literal.String */
c-[t] { color: #a67f59 } /* Literal.String.Single */
c-[u] { color: #a67f59 } /* Literal.String.Double */
c-[cp] { color: #708090 } /* Comment.Preproc */
c-[c1] { color: #708090 } /* Comment.Single */
c-[cs] { color: #708090 } /* Comment.Special */
c-[kc] { color: #990055 } /* Keyword.Constant */
c-[kn] { color: #990055 } /* Keyword.Namespace */
c-[kp] { color: #990055 } /* Keyword.Pseudo */
c-[kr] { color: #990055 } /* Keyword.Reserved */
c-[ld] { color: #000000 } /* Literal.Date */
c-[nc] { color: #0077aa } /* Name.Class */
c-[no] { color: #0077aa } /* Name.Constant */
c-[nd] { color: #0077aa } /* Name.Decorator */
c-[ni] { color: #0077aa } /* Name.Entity */
c-[ne] { color: #0077aa } /* Name.Exception */
c-[nf] { color: #0077aa } /* Name.Function */
c-[nl] { color: #0077aa } /* Name.Label */
c-[nn] { color: #0077aa } /* Name.Namespace */
c-[py] { color: #0077aa } /* Name.Property */
c-[ow] { color: #999999 } /* Operator.Word */
c-[mb] { color: #000000 } /* Literal.Number.Bin */
c-[mf] { color: #000000 } /* Literal.Number.Float */
c-[mh] { color: #000000 } /* Literal.Number.Hex */
c-[mi] { color: #000000 } /* Literal.Number.Integer */
c-[mo] { color: #000000 } /* Literal.Number.Oct */
c-[sb] { color: #a67f59 } /* Literal.String.Backtick */
c-[sc] { color: #a67f59 } /* Literal.String.Char */
c-[sd] { color: #a67f59 } /* Literal.String.Doc */
c-[se] { color: #a67f59 } /* Literal.String.Escape */
c-[sh] { color: #a67f59 } /* Literal.String.Heredoc */
c-[si] { color: #a67f59 } /* Literal.String.Interpol */
c-[sx] { color: #a67f59 } /* Literal.String.Other */
c-[sr] { color: #a67f59 } /* Literal.String.Regex */
c-[ss] { color: #a67f59 } /* Literal.String.Symbol */
c-[vc] { color: #0077aa } /* Name.Variable.Class */
c-[vg] { color: #0077aa } /* Name.Variable.Global */
c-[vi] { color: #0077aa } /* Name.Variable.Instance */
c-[il] { color: #000000 } /* Literal.Number.Integer.Long */

@media (prefers-color-scheme: dark) {
    .highlight:not(.idl) { background: rgba(255, 255, 255, .05); }

    c-[a] { color: #d33682 } /* Keyword.Declaration */
    c-[b] { color: #d33682 } /* Keyword.Type */
    c-[c] { color: #2aa198 } /* Comment */
    c-[d] { color: #2aa198 } /* Comment.Multiline */
    c-[e] { color: #268bd2 } /* Name.Attribute */
    c-[f] { color: #b58900 } /* Name.Tag */
    c-[g] { color: #cb4b16 } /* Name.Variable */
    c-[k] { color: #d33682 } /* Keyword */
    c-[l] { color: #657b83 } /* Literal */
    c-[m] { color: #657b83 } /* Literal.Number */
    c-[n] { color: #268bd2 } /* Name */
    c-[o] { color: #657b83 } /* Operator */
    c-[p] { color: #657b83 } /* Punctuation */
    c-[s] { color: #6c71c4 } /* Literal.String */
    c-[t] { color: #6c71c4 } /* Literal.String.Single */
    c-[u] { color: #6c71c4 } /* Literal.String.Double */
    c-[ch] { color: #2aa198 } /* Comment.Hashbang */
    c-[cp] { color: #2aa198 } /* Comment.Preproc */
    c-[cpf] { color: #2aa198 } /* Comment.PreprocFile */
    c-[c1] { color: #2aa198 } /* Comment.Single */
    c-[cs] { color: #2aa198 } /* Comment.Special */
    c-[kc] { color: #d33682 } /* Keyword.Constant */
    c-[kn] { color: #d33682 } /* Keyword.Namespace */
    c-[kp] { color: #d33682 } /* Keyword.Pseudo */
    c-[kr] { color: #d33682 } /* Keyword.Reserved */
    c-[ld] { color: #657b83 } /* Literal.Date */
    c-[nc] { color: #268bd2 } /* Name.Class */
    c-[no] { color: #268bd2 } /* Name.Constant */
    c-[nd] { color: #268bd2 } /* Name.Decorator */
    c-[ni] { color: #268bd2 } /* Name.Entity */
    c-[ne] { color: #268bd2 } /* Name.Exception */
    c-[nf] { color: #268bd2 } /* Name.Function */
    c-[nl] { color: #268bd2 } /* Name.Label */
    c-[nn] { color: #268bd2 } /* Name.Namespace */
    c-[py] { color: #268bd2 } /* Name.Property */
    c-[ow] { color: #657b83 } /* Operator.Word */
    c-[mb] { color: #657b83 } /* Literal.Number.Bin */
    c-[mf] { color: #657b83 } /* Literal.Number.Float */
    c-[mh] { color: #657b83 } /* Literal.Number.Hex */
    c-[mi] { color: #657b83 } /* Literal.Number.Integer */
    c-[mo] { color: #657b83 } /* Literal.Number.Oct */
    c-[sa] { color: #6c71c4 } /* Literal.String.Affix */
    c-[sb] { color: #6c71c4 } /* Literal.String.Backtick */
    c-[sc] { color: #6c71c4 } /* Literal.String.Char */
    c-[dl] { color: #6c71c4 } /* Literal.String.Delimiter */
    c-[sd] { color: #6c71c4 } /* Literal.String.Doc */
    c-[se] { color: #6c71c4 } /* Literal.String.Escape */
    c-[sh] { color: #6c71c4 } /* Literal.String.Heredoc */
    c-[si] { color: #6c71c4 } /* Literal.String.Interpol */
    c-[sx] { color: #6c71c4 } /* Literal.String.Other */
    c-[sr] { color: #6c71c4 } /* Literal.String.Regex */
    c-[ss] { color: #6c71c4 } /* Literal.String.Symbol */
    c-[fm] { color: #268bd2 } /* Name.Function.Magic */
    c-[vc] { color: #cb4b16 } /* Name.Variable.Class */
    c-[vg] { color: #cb4b16 } /* Name.Variable.Global */
    c-[vi] { color: #cb4b16 } /* Name.Variable.Instance */
    c-[vm] { color: #cb4b16 } /* Name.Variable.Magic */
    c-[il] { color: #657b83 } /* Literal.Number.Integer.Long */
}
</style>
 <body class="h-entry">
  <div class="head">
   <p data-fill-with="logo"></p>
   <h1 class="p-name no-ref" id="title">P2079R8<br>Parallel scheduler</h1>
   <h2 class="no-num no-toc no-ref heading settled" id="profile-and-date"><span class="content">Published Proposal, <time class="dt-updated" datetime="2025-05-18">2025-05-18</time></span></h2>
   <div data-fill-with="spec-metadata">
    <dl>
     <dt>This version:
     <dd><a class="u-url" href="http://wg21.link/P2079R8">http://wg21.link/P2079R8</a>
     <dt class="editor">Authors:
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:lucteo@lucteo.ro">Lucian Radu Teodorescu</a> (<span class="p-org org">Garmin</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:ruslan.arutyunyan@intel.com">Ruslan Arutyunyan</a> (<span class="p-org org">Intel</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:lwh@fb.com">Lee Howes</a>
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:michaelj.voss@intel.com">Michael Voss</a> (<span class="p-org org">Intel</span>)
     <dt>Audience:
     <dd>LWG
     <dt>Project:
     <dd>ISO/IEC 14882 Programming Languages — C++, ISO/IEC JTC1/SC22/WG21
    </dl>
   </div>
   <div data-fill-with="warning"></div>
   <hr title="Separator for header">
  </div>
  <div class="p-summary" data-fill-with="abstract">
   <h2 class="no-num no-toc no-ref heading settled" id="abstract"><span class="content">Abstract</span></h2>
   <p>A standard execution context based on the facilities in <a data-link-type="biblio" href="#biblio-p2300r10" title="`std::execution`">[P2300R10]</a> that implements parallel-forward-progress to
maximize portability. A set of parallel schedulers have an underlying shared thread pool implementation, and may
provide an interface to an OS-provided system thread pool.</p>
  </div>
  <nav data-fill-with="table-of-contents" id="toc">
   <h2 class="no-num no-toc no-ref" id="contents">Table of Contents</h2>
   <ol class="toc" role="directory">
    <li>
     <a href="#changes"><span class="secno">1</span> <span class="content">Changes</span></a>
     <ol class="toc">
      <li><a href="#r8"><span class="secno">1.1</span> <span class="content">R8</span></a>
      <li><a href="#r7"><span class="secno">1.2</span> <span class="content">R7</span></a>
      <li><a href="#r6"><span class="secno">1.3</span> <span class="content">R6</span></a>
      <li><a href="#r5"><span class="secno">1.4</span> <span class="content">R5</span></a>
      <li><a href="#r4"><span class="secno">1.5</span> <span class="content">R4</span></a>
      <li><a href="#r3"><span class="secno">1.6</span> <span class="content">R3</span></a>
      <li><a href="#r2"><span class="secno">1.7</span> <span class="content">R2</span></a>
      <li><a href="#r1"><span class="secno">1.8</span> <span class="content">R1</span></a>
      <li><a href="#r0"><span class="secno">1.9</span> <span class="content">R0</span></a>
     </ol>
    <li>
     <a href="#introduction"><span class="secno">2</span> <span class="content">Introduction</span></a>
     <ol class="toc">
      <li><a href="#design_overview"><span class="secno">2.1</span> <span class="content">Design overview</span></a>
     </ol>
    <li><a href="#examples"><span class="secno">3</span> <span class="content">Examples</span></a>
    <li>
     <a href="#design"><span class="secno">4</span> <span class="content">Design</span></a>
     <ol class="toc">
      <li><a href="#user_facing_api"><span class="secno">4.1</span> <span class="content">User facing API</span></a>
      <li><a href="#replaceability_api"><span class="secno">4.2</span> <span class="content">Replaceability API</span></a>
     </ol>
    <li>
     <a href="#design_considerations"><span class="secno">5</span> <span class="content">Design discussion and decisions</span></a>
     <ol class="toc">
      <li><a href="#drive_not_drive"><span class="secno">5.1</span> <span class="content">To drive or not to drive</span></a>
      <li><a href="#freestanding_implementations"><span class="secno">5.2</span> <span class="content">Freestanding implementations</span></a>
      <li><a href="#replaceable_system_context"><span class="secno">5.3</span> <span class="content">Making system context replaceable</span></a>
      <li><a href="#replaceability_details"><span class="secno">5.4</span> <span class="content">Replaceability details</span></a>
      <li><a href="#extensibility"><span class="secno">5.5</span> <span class="content">Extensibility</span></a>
      <li><a href="#shareability"><span class="secno">5.6</span> <span class="content">Shareability</span></a>
      <li><a href="#performance"><span class="secno">5.7</span> <span class="content">Performance</span></a>
      <li><a href="#lifetime"><span class="secno">5.8</span> <span class="content">Lifetime</span></a>
      <li><a href="#expose_system_context_name"><span class="secno">5.9</span> <span class="content">Need for the <code class="highlight"><c- n>system_context</c-></code> class</span></a>
      <li><a href="#environment"><span class="secno">5.10</span> <span class="content">Backend environment</span></a>
      <li><a href="#priorities"><span class="secno">5.11</span> <span class="content">Priorities</span></a>
      <li><a href="#diagram"><span class="secno">5.12</span> <span class="content">Interaction between frontend and backend</span></a>
      <li><a href="#reference_implementation"><span class="secno">5.13</span> <span class="content">Reference implementation</span></a>
      <li>
       <a href="#addressing_feedback"><span class="secno">5.14</span> <span class="content">Addressing received feedback</span></a>
       <ol class="toc">
        <li><a href="#borrow_threads"><span class="secno">5.14.1</span> <span class="content">Allow for system context to borrow threads</span></a>
        <li><a href="#wtp_and_gcd"><span class="secno">5.14.2</span> <span class="content">Allow implementations to use Grand Central Dispatch and Windows Thread Pool</span></a>
        <li><a href="#priorities_and_elastic_pools"><span class="secno">5.14.3</span> <span class="content">Priorities and elastic pools</span></a>
        <li><a href="#less_portability_with_implementation_defined"><span class="secno">5.14.4</span> <span class="content">Implementation-defined may make things less portable</span></a>
        <li><a href="#replaceability_not_needed"><span class="secno">5.14.5</span> <span class="content">Replaceability is not needed (at least on Windows)</span></a>
       </ol>
     </ol>
    <li>
     <a href="#specification"><span class="secno">6</span> <span class="content">Specification</span></a>
     <ol class="toc">
      <li><a href="#wording_version"><span class="secno">6.1</span> <span class="content">Header <code class="highlight"><c- o>&lt;</c-><c- n>version</c-><c- o>></c-></code> synopsis 17.3.2 [version.syn]</span></a>
      <li><a href="#wording_syn"><span class="secno">6.2</span> <span class="content">8.2 Header <code class="highlight"><c- o>&lt;</c-><c- n>execution</c-><c- o>></c-></code> synopsis 34.4 [execution.syn]</span></a>
      <li><a href="#wording_parallel_scheduler"><span class="secno">6.3</span> <span class="content">Parallel scheduler</span></a>
     </ol>
    <li>
     <a href="#polls"><span class="secno">7</span> <span class="content">Polls</span></a>
     <ol class="toc">
      <li><a href="#sg1.poland.2024"><span class="secno">7.1</span> <span class="content">SG1, Wrocław, Poland, 2024</span></a>
      <li><a href="#lewg.poland.2024"><span class="secno">7.2</span> <span class="content">LEWG, Wrocław, Poland, 2024</span></a>
      <li><a href="#sg1.austria.2025"><span class="secno">7.3</span> <span class="content">SG1, Hagenberg, Austria, 2025</span></a>
      <li><a href="#lewg.austria.2025"><span class="secno">7.4</span> <span class="content">LEWG, Hagenberg, Austria, 2025</span></a>
     </ol>
    <li>
     <a href="#references"><span class="secno"></span> <span class="content">References</span></a>
     <ol class="toc">
      <li><a href="#informative"><span class="secno"></span> <span class="content">Informative References</span></a>
     </ol>
   </ol>
  </nav>
  <main>
   <h2 class="heading settled" data-level="1" id="changes"><span class="secno">1. </span><span class="content">Changes</span><a class="self-link" href="#changes"></a></h2>
   <h3 class="heading settled" data-level="1.1" id="r8"><span class="secno">1.1. </span><span class="content">R8</span><a class="self-link" href="#r8"></a></h3>
   <ul>
    <li data-md>
     <p>Apply feedback from LEWG meeting in Hagenberg</p>
    <li data-md>
     <p>Add diagram for the <code class="highlight"><c- n>bulk_chunked</c-></code> and <code class="highlight"><c- n>bulk_unchunked</c-></code> cases.</p>
    <li data-md>
     <p>Improve wording</p>
   </ul>
   <h3 class="heading settled" data-level="1.2" id="r7"><span class="secno">1.2. </span><span class="content">R7</span><a class="self-link" href="#r7"></a></h3>
   <ul>
    <li data-md>
     <p>Change the title from "System execution context" to "Parallel scheduler"</p>
    <li data-md>
     <p>Incorporate feedback from SG1 Hagenberg, Austria, February 2025 (rename <code class="highlight"><c- n>system_scheduler</c-></code> to <code class="highlight"><c- n>parallel_scheduler</c-></code>, drop run-time replaceability)</p>
    <li data-md>
     <p>Tweaking the replaceability API to be consistent with <a data-link-type="biblio" href="#biblio-p3481r1" title="std::execution::bulk() issues">[P3481R1]</a>, now at R2 (support <code class="highlight"><c- n>bulk_chunked</c-></code> and <code class="highlight"><c- n>bulk_unchunked</c-></code>)</p>
   </ul>
   <h3 class="heading settled" data-level="1.3" id="r6"><span class="secno">1.3. </span><span class="content">R6</span><a class="self-link" href="#r6"></a></h3>
   <ul>
    <li data-md>
     <p>Incorporate feedback from SG1 and LEWG given in Wrocław, Poland, November 2024.</p>
    <li data-md>
     <p>Remove the wording about delegatee schedulers</p>
    <li data-md>
     <p><code class="highlight"><c- n>system_scheduler</c-></code>’s sender can complete with <code class="highlight"><c- n>set_error</c-></code>, with a <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>exception_ptr</c-></code> argument.</p>
    <li data-md>
     <p>Remove <code class="highlight"><c- n>system_scheduler</c-> <c- n>query</c-><c- p>(</c-><c- n>get_completion_scheduler_t</c-><c- p>)</c-></code> overload for <code class="highlight"><c- n>set_stopped_t</c-></code>.</p>
    <li data-md>
     <p>Add <code class="highlight"><c- k>noexcept</c-></code> to move, copy constructor, move/copy assignment operators (special member functions) of <code class="highlight"><c- n>system_scheduler</c-></code>.</p>
    <li data-md>
     <p>Add lvalue <code class="highlight"><c- n>connect</c-></code> to to system sender class.</p>
    <li data-md>
     <p>Add <code class="highlight"><c- n>sender_concept</c-></code>, <code class="highlight"><c- n>completion_signatures</c-></code> and <code class="highlight"><c- n>get_env</c-></code> to the definition of the system sender class, making it a sender.</p>
    <li data-md>
     <p>Mandate replaceability</p>
    <li data-md>
     <p>Define replaceability mechanism (both link-time and runtime)</p>
    <li data-md>
     <p>Define replaceability API</p>
    <li data-md>
     <p>Add Specification section</p>
   </ul>
   <h3 class="heading settled" data-level="1.4" id="r5"><span class="secno">1.4. </span><span class="content">R5</span><a class="self-link" href="#r5"></a></h3>
   <ul>
    <li data-md>
     <p>Streamline the paper</p>
    <li data-md>
     <p>Make replaceability availability implementation-defined</p>
    <li data-md>
     <p>Make replaceability API implementation-defined</p>
    <li data-md>
     <p>Replace the use of <code class="highlight"><c- n>system_context</c-></code> class with direct calls to <code class="highlight"><c- n>get_system_scheduler</c-><c- p>()</c-></code></p>
    <li data-md>
     <p>Update user-facing API</p>
    <li data-md>
     <p>Relax the lifetime guarantees to allow using system scheduler outside of <code class="highlight"><c- n>main</c-><c- p>()</c-></code></p>
   </ul>
   <h3 class="heading settled" data-level="1.5" id="r4"><span class="secno">1.5. </span><span class="content">R4</span><a class="self-link" href="#r4"></a></h3>
   <ul>
    <li data-md>
     <p>Add more design considerations &amp; goals.</p>
    <li data-md>
     <p>Add comparison of different replaceability options</p>
    <li data-md>
     <p>Add motivation for replaceability ABI standardization</p>
    <li data-md>
     <p>Add the example of the ABI for replacement</p>
    <li data-md>
     <p>Strengthen the lifetime guarantees.</p>
   </ul>
   <h3 class="heading settled" data-level="1.6" id="r3"><span class="secno">1.6. </span><span class="content">R3</span><a class="self-link" href="#r3"></a></h3>
   <ul>
    <li data-md>
     <p>Remove <code class="highlight"><c- n>execute_all</c-></code> and <code class="highlight"><c- n>execute_chunk</c-></code>. Replace with compile-time customization and a design discussion.</p>
    <li data-md>
     <p>Add design discussion about the approach we should take for customization and the extent to which the context should be implementation-defined.</p>
    <li data-md>
     <p>Add design discussion for an explicit <code class="highlight"><c- n>system_context</c-></code> class.</p>
    <li data-md>
     <p>Add design discussion about priorities.</p>
   </ul>
   <h3 class="heading settled" data-level="1.7" id="r2"><span class="secno">1.7. </span><span class="content">R2</span><a class="self-link" href="#r2"></a></h3>
   <ul>
    <li data-md>
     <p>Significant redesign to fit in <a data-link-type="biblio" href="#biblio-p2300r10" title="`std::execution`">[P2300R10]</a> model.</p>
    <li data-md>
     <p>Strictly limit to parallel progress without control over the level of parallelism.</p>
    <li data-md>
     <p>Remove direct support for task groups, delegating that to <code class="highlight"><c- n>async_scope</c-></code>.</p>
   </ul>
   <h3 class="heading settled" data-level="1.8" id="r1"><span class="secno">1.8. </span><span class="content">R1</span><a class="self-link" href="#r1"></a></h3>
   <ul>
    <li data-md>
     <p>Minor modifications</p>
   </ul>
   <h3 class="heading settled" data-level="1.9" id="r0"><span class="secno">1.9. </span><span class="content">R0</span><a class="self-link" href="#r0"></a></h3>
   <ul>
    <li data-md>
     <p>First revision</p>
   </ul>
   <h2 class="heading settled" data-level="2" id="introduction"><span class="secno">2. </span><span class="content">Introduction</span><a class="self-link" href="#introduction"></a></h2>
    <a data-link-type="biblio" href="#biblio-p2300r10" title="`std::execution`">[P2300R10]</a> describes a rounded set of primitives for asynchronous and parallel execution that give a firm grounding for the future.
However, the paper lacks a standard execution context and scheduler.
It has been broadly accepted that we need some sort of standard scheduler. 
   <p>As part of <a data-link-type="biblio" href="#biblio-p3109r0" title="A plan for std::execution for C++26">[P3109R0]</a>, system context was voted as a must-have for the initial release of senders/receivers.
It provides a convenient and scalable way of spawning concurrent work for the users of senders/receivers.</p>
   <p>As noted in <a data-link-type="biblio" href="#biblio-p2079r1" title="Parallel Executor">[P2079R1]</a>, an earlier revision of this paper, the <code class="highlight"><c- n>static_thread_pool</c-></code> included in later revisions of <a data-link-type="biblio" href="#biblio-p0443r14" title="A Unified Executors Proposal for C++">[P0443R14]</a> had many shortcomings.
This was removed from <a data-link-type="biblio" href="#biblio-p2300r10" title="`std::execution`">[P2300R10]</a> based on that and other input.</p>
   <p>One of the biggest problems with local thread pools is that they lead to CPU oversubscription.
This introduces a performance problem for complex systems that are composed from many independent parts.</p>
   <p>Another problem that system context is aiming to solve is the composability of components that may rely on different parallel engines.
An application might have multiple parts, possibly in different binaries; different parts of the application may not know of each other.
Thus, different parts of the application might use different parallel engines.
This can create several problems:</p>
   <ul>
    <li data-md>
     <p>oversubscription because of different thread pools</p>
    <li data-md>
     <p>problems with nested parallel loops (one parallel loop is called from the other)</p>
    <li data-md>
     <p>problems related to interaction between different parallel engines</p>
    <li data-md>
     <p>etc.</p>
   </ul>
   <p>To solve these problems we propose a parallel execution context that:</p>
   <ul>
    <li data-md>
     <p>can be shared between multiple parts of the application</p>
    <li data-md>
     <p>does not suffer from oversubscription</p>
    <li data-md>
     <p>can integrate with the OS scheduler</p>
    <li data-md>
     <p>can be replaced by the user to compose well with other parallel runtimes</p>
   </ul>
   <p>This parallel execution context is called in this paper the <strong>system context</strong>.
The users can obtain a scheduler from this system context.</p>
   <p><strong>Note</strong>: SG1 has expressed a desire to use the name "parallel scheduler" instead of "system execution scheduler", so that we can use "system execution scheduler" for a concurrent-forward-progress execution context in the future.
For simplicity reasons, the paper uses the term "system context" to refer to the context of the parallel scheduler.</p>
   <h3 class="heading settled" data-level="2.1" id="design_overview"><span class="secno">2.1. </span><span class="content">Design overview</span><a class="self-link" href="#design_overview"></a></h3>
   <p>The system context is a parallel execution context of undefined size, supporting explicitly <em>parallel forward progress</em>.</p>
   <p>The execution resources of the system context are envisioned to be shared across all binaries in the same process.
System scheduler works best with CPU-intensive workloads, and thus, limiting oversubscription is a key goal.</p>
   <p>By default, the system context should be able to use the OS scheduler, if the OS has one.
On systems where the OS scheduler is not available, the system context will have a generic implementation that acts like a thread pool.</p>
   <p>For enabling the users to hand-tune the performance of their applications, and for fulfilling the composability requirements, the system context should be replaceable.
The user should be able to replace the default implementation of the system context with a custom one that fits their needs.</p>
   <p>Other key concerns of this design are:</p>
   <ul>
    <li data-md>
     <p>Extensibility: being able to extend the design to work with new additions to the senders/receivers framework.</p>
    <li data-md>
     <p>Lifetime: as system context is a global resource, we need to pay attention to the lifetime of this resource.</p>
    <li data-md>
     <p>Performance: as we envision this to be used in many cases to spawn concurrent work, performance considerations are important.</p>
   </ul>
   <h2 class="heading settled" data-level="3" id="examples"><span class="secno">3. </span><span class="content">Examples</span><a class="self-link" href="#examples"></a></h2>
    As a simple parallel scheduler we can use it locally, and <code class="highlight"><c- n>sync_wait</c-></code> on the work to make sure that it is complete.
With forward progress delegation this would also allow the scheduler to delegate work to the blocked thread.
This example is derived from the Hello World example in <a data-link-type="biblio" href="#biblio-p2300r10" title="`std::execution`">[P2300R10]</a>. Note that it only adds a well-defined context
object, and queries that for the scheduler.
Everything else is unchanged about the example. 
<pre class="language-cpp highlight"><c- k>using</c-> <c- k>namespace</c-> <c- o>=</c-> <c- nn>std</c-><c- o>::</c-><c- nn>execution</c-><c- p>;</c->

<c- n>scheduler</c-> <c- k>auto</c-> <c- n>sch</c-> <c- o>=</c-> <c- n>get_parallel_scheduler</c-><c- p>();</c->

<c- n>sender</c-> <c- k>auto</c-> <c- n>begin</c-> <c- o>=</c-> <c- n>schedule</c-><c- p>(</c-><c- n>sch</c-><c- p>);</c->
<c- n>sender</c-> <c- k>auto</c-> <c- n>hi</c-> <c- o>=</c-> <c- n>then</c-><c- p>(</c-><c- n>begin</c-><c- p>,</c-> <c- p>[]{</c->
    <c- n>std</c-><c- o>::</c-><c- n>cout</c-> <c- o>&lt;&lt;</c-> <c- s>"Hello world! Have an int."</c-><c- p>;</c->
    <c- k>return</c-> <c- mi>13</c-><c- p>;</c->
<c- p>});</c->
<c- n>sender</c-> <c- k>auto</c-> <c- n>add_42</c-> <c- o>=</c-> <c- n>then</c-><c- p>(</c-><c- n>hi</c-><c- p>,</c-> <c- p>[](</c-><c- b>int</c-> <c- n>arg</c-><c- p>)</c-> <c- p>{</c-> <c- k>return</c-> <c- n>arg</c-> <c- o>+</c-> <c- mi>42</c-><c- p>;</c-> <c- p>});</c->

<c- k>auto</c-> <c- p>[</c-><c- n>i</c-><c- p>]</c-> <c- o>=</c-> <c- n>std</c-><c- o>::</c-><c- n>this_thread</c-><c- o>::</c-><c- n>sync_wait</c-><c- p>(</c-><c- n>add_42</c-><c- p>).</c-><c- n>value</c-><c- p>();</c->
</pre>
   <p>We can structure the same thing using <code class="highlight"><c- n>on</c-></code>, which better matches structured concurrency:</p>
<pre class="language-cpp highlight"><c- k>using</c-> <c- k>namespace</c-> <c- nn>std</c-><c- o>::</c-><c- nn>execution</c-><c- p>;</c->

<c- n>scheduler</c-> <c- k>auto</c-> <c- n>sch</c-> <c- o>=</c-> <c- n>get_parallel_scheduler</c-><c- p>();</c->

<c- n>sender</c-> <c- k>auto</c-> <c- n>hi</c-> <c- o>=</c-> <c- n>then</c-><c- p>(</c-><c- n>just</c-><c- p>(),</c-> <c- p>[]{</c->
    <c- n>std</c-><c- o>::</c-><c- n>cout</c-> <c- o>&lt;&lt;</c-> <c- s>"Hello world! Have an int."</c-><c- p>;</c->
    <c- k>return</c-> <c- mi>13</c-><c- p>;</c->
<c- p>});</c->
<c- n>sender</c-> <c- k>auto</c-> <c- n>add_42</c-> <c- o>=</c-> <c- n>then</c-><c- p>(</c-><c- n>hi</c-><c- p>,</c-> <c- p>[](</c-><c- b>int</c-> <c- n>arg</c-><c- p>)</c-> <c- p>{</c-> <c- k>return</c-> <c- n>arg</c-> <c- o>+</c-> <c- mi>42</c-><c- p>;</c-> <c- p>});</c->

<c- k>auto</c-> <c- p>[</c-><c- n>i</c-><c- p>]</c-> <c- o>=</c-> <c- n>std</c-><c- o>::</c-><c- n>this_thread</c-><c- o>::</c-><c- n>sync_wait</c-><c- p>(</c-><c- n>on</c-><c- p>(</c-><c- n>sch</c-><c- p>,</c-> <c- n>add_42</c-><c- p>)).</c-><c- n>value</c-><c- p>();</c->
</pre>
   <p>The parallel scheduler customizes <code class="highlight"><c- n>bulk</c-></code>, so we can use <code class="highlight"><c- n>bulk</c-></code> dependent on the scheduler.
Here we use it in structured form using the parameterless <code class="highlight"><c- n>get_scheduler</c-></code> that retrieves the scheduler from the receiver, combined with <code class="highlight"><c- n>on</c-></code>:</p>
<pre class="language-cpp highlight"><c- k>using</c-> <c- k>namespace</c-> <c- nn>std</c-><c- o>::</c-><c- nn>execution</c-><c- p>;</c->

<c- k>auto</c-> <c- n>bar</c-><c- p>()</c-> <c- p>{</c->
  <c- k>return</c->
    <c- n>let_value</c-><c- p>(</c->
      <c- n>read_env</c-><c- p>(</c-><c- n>get_scheduler</c-><c- p>),</c->      <c- c1>// Fetch scheduler from receiver.</c->
      <c- p>[](</c-><c- k>auto</c-> <c- n>current_sched</c-><c- p>)</c-> <c- p>{</c->
        <c- k>return</c-> <c- n>bulk</c-><c- p>(</c->
          <c- n>current_sched</c-><c- p>.</c-><c- n>schedule</c-><c- p>(),</c->
          <c- mi>1</c-><c- p>,</c->                        <c- c1>// Only 1 bulk task as a lazy way of making cout safe</c->
          <c- p>[](</c-><c- k>auto</c-> <c- n>idx</c-><c- p>){</c->
            <c- n>std</c-><c- o>::</c-><c- n>cout</c-> <c- o>&lt;&lt;</c-> <c- s>"Index: "</c-> <c- o>&lt;&lt;</c-> <c- n>idx</c-> <c- o>&lt;&lt;</c-> <c- s>"</c-><c- se>\n</c-><c- s>"</c-><c- p>;</c->
          <c- p>})</c->
      <c- p>});</c->
<c- p>}</c->

<c- b>void</c-> <c- n>foo</c-><c- p>()</c->
<c- p>{</c->
  <c- k>auto</c-> <c- p>[</c-><c- n>i</c-><c- p>]</c-> <c- o>=</c-> <c- n>std</c-><c- o>::</c-><c- n>this_thread</c-><c- o>::</c-><c- n>sync_wait</c-><c- p>(</c->
    <c- n>on</c-><c- p>(</c->
      <c- n>get_parallel_scheduler</c-><c- p>(),</c->       <c- c1>// Start bar on the system's parallel scheduler</c->
      <c- n>bar</c-><c- p>()))</c->                         <c- c1>// and propagate it through the receivers</c->
    <c- p>.</c-><c- n>value</c-><c- p>();</c->
<c- p>}</c->
</pre>
   <p>Use <code class="highlight"><c- n>async_scope</c-></code> and a custom system context implementation linked in to the process (through a mechanism undefined in the example).
This might be how a given platform exposes a custom context.
In this case we assume it has no threads of its own and has to take over the main thread through an custom <code class="highlight"><c- n>drive</c-><c- p>()</c-></code> operation that can be looped until a callback requests <code class="highlight"><c- n>exit</c-></code> on the context.</p>
<pre class="language-cpp highlight"><c- k>using</c-> <c- k>namespace</c-> <c- nn>std</c-><c- o>::</c-><c- nn>execution</c-><c- p>;</c->

<c- b>int</c-> <c- n>result</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->

<c- p>{</c->
  <c- n>async_scope</c-> <c- n>scope</c-><c- p>;</c->
  <c- n>scheduler</c-> <c- k>auto</c-> <c- n>sch</c-> <c- o>=</c-> <c- n>get_parallel_scheduler</c-><c- p>();</c->

  <c- n>sender</c-> <c- k>auto</c-> <c- n>work</c-> <c- o>=</c->
    <c- n>then</c-><c- p>(</c-><c- n>just</c-><c- p>(),</c-> <c- p>[</c-><c- o>&amp;</c-><c- p>](</c-><c- k>auto</c-> <c- n>sched</c-><c- p>)</c-> <c- p>{</c->

      <c- b>int</c-> <c- n>val</c-> <c- o>=</c-> <c- mi>13</c-><c- p>;</c->

      <c- k>auto</c-> <c- n>print_sender</c-> <c- o>=</c-> <c- n>then</c-><c- p>(</c-><c- n>just</c-><c- p>(),</c-> <c- p>[</c-><c- n>val</c-><c- p>]{</c->
        <c- n>std</c-><c- o>::</c-><c- n>cout</c-> <c- o>&lt;&lt;</c-> <c- s>"Hello world! Have an int with value: "</c-> <c- o>&lt;&lt;</c-> <c- n>val</c-> <c- o>&lt;&lt;</c-> <c- s>"</c-><c- se>\n</c-><c- s>"</c-><c- p>;</c->
      <c- p>});</c->

      <c- c1>// spawn the print sender on sched to make sure it</c->
      <c- c1>// completes before shutdown</c->
      <c- n>scope</c-><c- p>.</c-><c- n>spawn</c-><c- p>(</c-><c- n>on</c-><c- p>(</c-><c- n>sch</c-><c- p>,</c-> <c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>print_sender</c-><c- p>)));</c->

      <c- k>return</c-> <c- n>val</c-><c- p>;</c->
    <c- p>});</c->

  <c- n>scope</c-><c- p>.</c-><c- n>spawn</c-><c- p>(</c-><c- n>on</c-><c- p>(</c-><c- n>sch</c-><c- p>,</c-> <c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>work</c-><c- p>)));</c->

  <c- c1>// This is custom code for a single-threaded context that we have replaced</c->
  <c- c1>// We need to drive it in main.</c->
  <c- c1>// It is not directly sender-aware, like any pre-existing work loop, but</c->
  <c- c1>// does provide an exit operation. We may call this from a callback chained</c->
  <c- c1>// after the scope becomes empty.</c->
  <c- c1>// We use a temporary terminal_scope here to separate the shut down</c->
  <c- c1>// operation and block for it at the end of main, knowing it will complete.</c->
  <c- n>async_scope</c-> <c- n>terminal_scope</c-><c- p>;</c->
  <c- n>terminal_scope</c-><c- p>.</c-><c- n>spawn</c-><c- p>(</c->
    <c- n>scope</c-><c- p>.</c-><c- n>on_empty</c-><c- p>()</c-> <c- o>|</c-> <c- n>then</c-><c- p>([](</c-><c- n>my_os</c-><c- o>::</c-><c- n>exit</c-><c- p>(</c-><c- n>sch</c-><c- p>))));</c->
  <c- n>my_os</c-><c- o>::</c-><c- n>drive</c-><c- p>(</c-><c- n>sch</c-><c- p>);</c->
  <c- n>std</c-><c- o>::</c-><c- n>this_thread</c-><c- o>::</c-><c- n>sync_wait</c-><c- p>(</c-><c- n>terminal_scope</c-><c- p>);</c->
<c- p>};</c->

<c- c1>// The scope ensured that all work is safely joined, so result contains 13</c->
<c- n>std</c-><c- o>::</c-><c- n>cout</c-> <c- o>&lt;&lt;</c-> <c- s>"Result: "</c-> <c- o>&lt;&lt;</c-> <c- n>result</c-> <c- o>&lt;&lt;</c-> <c- s>"</c-><c- se>\n</c-><c- s>"</c-><c- p>;</c->

<c- c1>// and destruction of the context is now safe</c->
</pre>
   <hr>
   <p>To change the implementation of system scheduler at link-time, one might do it the following way (very simplistic example):</p>
<pre class="language-cpp highlight"><c- k>namespace</c-> <c- nn>std</c-><c- o>::</c-><c- nn>execution</c-><c- o>::</c-><c- nn>system_context_replaceability</c-> <c- p>{</c->
  <c- k>extern</c-> <c- n>__attribute__</c-><c- p>((</c-><c- n>__weak__</c-><c- p>))</c->
  <c- n>std</c-><c- o>::</c-><c- n>shared_ptr</c-><c- o>&lt;</c-><c- n>parallel_scheduler</c-><c- o>></c-> <c- n>query_parallel_scheduler_backend</c-><c- p>()</c-> <c- p>{</c->
    <c- k>return</c-> <c- n>std</c-><c- o>::</c-><c- n>make_shared</c-><c- o>&lt;</c-><c- n>my_parallel_scheduler_impl</c-><c- o>></c-><c- p>();</c->
  <c- p>}</c->
<c- p>}</c->
</pre>
   <h2 class="heading settled" data-level="4" id="design"><span class="secno">4. </span><span class="content">Design</span><a class="self-link" href="#design"></a></h2>
   <h3 class="heading settled" data-level="4.1" id="user_facing_api"><span class="secno">4.1. </span><span class="content">User facing API</span><a class="self-link" href="#user_facing_api"></a></h3>
<pre class="highlight"><c- n>parallel_scheduler</c-> <c- nf>get_parallel_scheduler</c-><c- p>();</c->

<c- k>class</c-> <c- nc>parallel_scheduler</c-> <c- p>{</c-> <c- c1>// exposition only</c->
<c- k>public</c-><c- o>:</c->
  <c- n>parallel_scheduler</c-><c- p>()</c-> <c- o>=</c-> <c- k>delete</c-><c- p>;</c->
  <c- o>~</c-><c- n>parallel_scheduler</c-><c- p>();</c->

  <c- n>parallel_scheduler</c-><c- p>(</c-><c- k>const</c-> <c- n>parallel_scheduler</c-><c- o>&amp;</c-><c- p>)</c-> <c- k>noexcept</c-><c- p>;</c->
  <c- n>parallel_scheduler</c-><c- p>(</c-><c- n>parallel_scheduler</c-><c- o>&amp;&amp;</c-><c- p>)</c-> <c- k>noexcept</c-><c- p>;</c->
  <c- n>parallel_scheduler</c-><c- o>&amp;</c-> <c- k>operator</c-><c- o>=</c-><c- p>(</c-><c- k>const</c-> <c- n>parallel_scheduler</c-><c- o>&amp;</c-><c- p>)</c-> <c- k>noexcept</c-><c- p>;</c->
  <c- n>parallel_scheduler</c-><c- o>&amp;</c-> <c- k>operator</c-><c- o>=</c-><c- p>(</c-><c- n>parallel_scheduler</c-><c- o>&amp;&amp;</c-><c- p>)</c-> <c- k>noexcept</c-><c- p>;</c->

  <c- b>bool</c-> <c- k>operator</c-><c- o>==</c-><c- p>(</c-><c- k>const</c-> <c- n>parallel_scheduler</c-><c- o>&amp;</c-><c- p>)</c-> <c- k>const</c-> <c- k>noexcept</c-><c- p>;</c->

  <c- n>forward_progress_guarantee</c-> <c- nf>query</c-><c- p>(</c-><c- n>get_forward_progress_guarantee_t</c-><c- p>)</c-> <c- k>const</c-> <c- k>noexcept</c-><c- p>;</c->

  <i><c- n>unspecified</c-><c- o>-</c-><c- n>parallel</c-><c- o>-</c-><c- n>sender</c-></i> <c- n>schedule</c-><c- p>()</c-> <c- k>const</c-> <c- k>noexcept</c-><c- p>;</c->
  <c- c1>// customization for bulk</c->
<c- p>};</c->

<c- k>class</c-> <i><c- nc>unspecified</c-><c- o>-</c-><c- n>parallel</c-><c- o>-</c-><c- n>sender</c-></i> <c- p>{</c-> <c- c1>// exposition only</c->
<c- k>public</c-><c- o>:</c->
  <c- k>using</c-> <c- n>sender_concept</c-> <c- o>=</c-> <c- n>sender_t</c-><c- p>;</c->
  <c- k>using</c-> <c- n>completion_signatures</c-> <c- o>=</c-> <c- n>execution</c-><c- o>::</c-><c- n>completion_signatures</c-><c- o>&lt;</c->
    <c- n>set_value_t</c-><c- p>(),</c->
    <c- n>set_stopped_t</c-><c- p>(),</c->
    <c- n>set_error_t</c-><c- p>(</c-><c- n>exception_ptr</c-><c- p>)</c-><c- o>></c-><c- p>;</c->

  <i><c- n>impl</c-><c- o>-</c-><c- n>defined</c-><c- o>-</c-><c- n>environment</c-></i> <c- n>get_env</c-><c- p>()</c-> <c- k>const</c-> <c- k>noexcept</c-><c- p>;</c->

  <c- n>parallel_scheduler</c-> <c- nf>query</c-><c- p>(</c-><c- n>get_completion_scheduler_t</c-><c- o>&lt;</c-><c- n>set_value_t</c-><c- o>></c-><c- p>)</c-> <c- k>const</c-> <c- k>noexcept</c-><c- p>;</c->

  <c- k>template</c-><c- o>&lt;</c-><c- n>receiver</c-> <c- n>R</c-><c- o>></c->
  <c- k>requires</c-> <c- n>receiver_of</c-><c- o>&lt;</c-><c- n>R</c-><c- o>></c->
  <i><c- n>impl</c-><c- o>-</c-><c- n>defined</c-><c- o>-</c-><c- n>operation_state</c-></i> <c- n>connect</c-><c- p>(</c-><c- n>R</c-><c- o>&amp;&amp;</c-><c- p>)</c-> <c- o>&amp;</c->
      <c- k>noexcept</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>is_nothrow_constructible_v</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>remove_cvref_t</c-><c- o>&lt;</c-><c- n>R</c-><c- o>></c-><c- p>,</c-> <c- n>R</c-><c- o>></c-><c- p>);</c->
  <c- k>template</c-><c- o>&lt;</c-><c- n>receiver</c-> <c- n>R</c-><c- o>></c->
  <c- k>requires</c-> <c- n>receiver_of</c-><c- o>&lt;</c-><c- n>R</c-><c- o>></c->
  <i><c- n>impl</c-><c- o>-</c-><c- n>defined</c-><c- o>-</c-><c- n>operation_state</c-></i> <c- n>connect</c-><c- p>(</c-><c- n>R</c-><c- o>&amp;&amp;</c-><c- p>)</c-> <c- o>&amp;&amp;</c->
      <c- k>noexcept</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>is_nothrow_constructible_v</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>remove_cvref_t</c-><c- o>&lt;</c-><c- n>R</c-><c- o>></c-><c- p>,</c-> <c- n>R</c-><c- o>></c-><c- p>);</c->
<c- p>};</c->
</pre>
   <ul>
    <li data-md>
     <p><code class="highlight"><c- n>get_parallel_scheduler</c-><c- p>()</c-></code> returns a scheduler that provides a view on some underlying execution context supporting <em>parallel forward progress</em>, with at least one thread of execution (which may be the main thread).</p>
    <li data-md>
     <p>two objects returned by <code class="highlight"><c- n>get_parallel_scheduler</c-><c- p>()</c-></code> most frequently share the same execution context.
If work submitted by one can consume the underlying thread pool, that can block progress of another.
One notable exception is when the backend scheduler needs to be re-created.</p>
    <li data-md>
     <p>if <code class="highlight"><c- n>Sch</c-></code> is the type of object returned by <code class="highlight"><c- n>get_parallel_scheduler</c-><c- p>()</c-></code>, then:</p>
     <ul>
      <li data-md>
       <p><code class="highlight"><c- n>Sch</c-></code> is implementation-defined, but must be nameable.</p>
      <li data-md>
       <p><code class="highlight"><c- n>Sch</c-></code> models the <code class="highlight"><c- n>scheduler</c-></code> concept.</p>
      <li data-md>
       <p><code class="highlight"><c- n>Sch</c-></code> implements the <code class="highlight"><c- n>get_forward_progress_guarantee</c-></code> query to return <code class="highlight"><c- n>parallel</c-></code>.</p>
      <li data-md>
       <p><code class="highlight"><c- n>Sch</c-></code> implements <code class="highlight"><c- n>schedule</c-></code> customization point to return an implementation-defined <code class="highlight"><c- n>sender</c-></code> type.</p>
      <li data-md>
       <p><code class="highlight"><c- n>schedule</c-></code> calls on <code class="highlight"><c- n>Sch</c-></code> are non-blocking operations.</p>
      <li data-md>
       <p><code class="highlight"><c- n>Sch</c-></code> implements the <code class="highlight"><c- n>bulk</c-></code> CPO to customize the <code class="highlight"><c- n>bulk</c-></code> sender adapter such that:</p>
       <ul>
        <li data-md>
         <p>when <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>set_value</c-><c- p>(</c-><c- n>r</c-><c- p>,</c-> <c- n>args</c-><c- p>...)</c-></code> is called on the created <code class="highlight"><c- n>receiver</c-></code>, an agent is created with parallel forward progress on the
underlying system context for each <code class="highlight"><c- n>i</c-></code> of type <code class="highlight"><c- n>Shape</c-></code> from <code class="highlight"><c- mi>0</c-></code> to <code class="highlight"><c- n>sh</c-></code>, where <code class="highlight"><c- n>sh</c-></code> is the shape parameter to the <code class="highlight"><c- n>bulk</c-></code> call, that calls <code class="highlight"><c- n>f</c-><c- p>(</c-><c- n>i</c-><c- p>,</c-> <c- n>args</c-><c- p>...)</c-></code>.</p>
       </ul>
     </ul>
    <li data-md>
     <p>if <code class="highlight"><c- n>sch</c-></code> is an object returned by <code class="highlight"><c- n>get_parallel_scheduler</c-><c- p>()</c-></code>, then:</p>
     <ul>
      <li data-md>
       <p>the lifetime of <code class="highlight"><c- n>sch</c-></code> does not have to outlive work submitted to it.</p>
      <li data-md>
       <p><code class="highlight"><c- n>sch</c-></code> is both move and copy constructible and assignable.</p>
      <li data-md>
       <p>if <code class="highlight"><c- n>sch2</c-></code> is another object returned by <code class="highlight"><c- n>get_parallel_scheduler</c-><c- p>()</c-></code>, then <code class="highlight"><c- n>sch</c-> <c- o>==</c-> <c- n>sch2</c-></code> is <code class="highlight">true</code> if and only if they share the same backend implementation.</p>
     </ul>
    <li data-md>
     <p>if <code class="highlight"><c- n>snd</c-></code> is a sender obtaining from calling <code class="highlight"><c- n>schedule</c-></code> on the scheduler returned by <code class="highlight"><c- n>get_parallel_scheduler</c-><c- p>()</c-></code>, and <code class="highlight"><c- n>Snd</c-></code> its type, then:</p>
     <ul>
      <li data-md>
       <p><code class="highlight"><c- n>Snd</c-></code> is implementation-defined, but must be nameable.</p>
      <li data-md>
       <p><code class="highlight"><c- n>Snd</c-></code> models the <code class="highlight"><c- n>sender</c-></code> concept.</p>
      <li data-md>
       <p><code class="highlight"><c- n>Snd</c-></code> exposes an environment that implements the <code class="highlight"><c- n>get_completion_scheduler</c-></code> query for the value completion channel, returning an object that equals to itself.</p>
      <li data-md>
       <p><code class="highlight"><c- n>connect</c-></code>ing <code class="highlight"><c- n>snd</c-></code> to a <code class="highlight"><c- n>receiver</c-></code> object and calling <code class="highlight"><c- n>start</c-><c- p>()</c-></code> on the resulting operation state are non-blocking operations.</p>
      <li data-md>
       <p>if <code class="highlight"><c- n>snd</c-></code> is connected with a <code class="highlight"><c- n>receiver</c-></code> that supports the <code class="highlight"><c- n>get_stop_token</c-></code> query and if that <code class="highlight"><c- n>stop_token</c-></code> is stopped, operations
on which <code class="highlight"><c- n>start</c-></code> has been called, but are not yet running (and are hence not yet guaranteed to make progress) <strong>must</strong> complete with <code class="highlight"><c- n>set_stopped</c-></code> as soon as is practical.</p>
      <li data-md>
       <p>if <code class="highlight"><c- n>snd</c-></code> is connected with a <code class="highlight"><c- n>receiver</c-></code>, and the resulting operation is started but the implementation reaches an error condition, the operation must complete with <code class="highlight"><c- n>set_error</c-><c- p>(</c-><c- n>ep</c-><c- p>)</c-></code>, where <code class="highlight"><c- n>ep</c-></code> is of type <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>exception_ptr</c-></code>.</p>
     </ul>
    <li data-md>
     <p>The <code class="highlight"><c- n>bulk</c-></code> algorithm is customized for the scheduler returned by <code class="highlight"><c- n>get_parallel_scheduler</c-><c- p>()</c-></code></p>
     <ul>
      <li data-md>
       <p>the corresponding sender has the same properties as the sender returned by <code class="highlight"><c- n>schedule</c-><c- p>()</c-></code>;</p>
      <li data-md>
       <p>the functor given to <code class="highlight"><c- n>bulk</c-></code> is invoked from threads belonging to the system execution context.</p>
     </ul>
   </ul>
   <h3 class="heading settled" data-level="4.2" id="replaceability_api"><span class="secno">4.2. </span><span class="content">Replaceability API</span><a class="self-link" href="#replaceability_api"></a></h3>
<pre class="highlight"><c- k>namespace</c-> <c- nn>std</c-><c- o>::</c-><c- nn>execution</c-><c- o>::</c-><c- nn>system_context_replaceability</c-> <c- p>{</c->
  <c- k>struct</c-> <c- nc>parallel_scheduler</c-><c- p>;</c->

  <c- c1>// Called by the frontend.</c->
  <c- c1>// Users might replace this function.</c->
  <c- n>shared_ptr</c-><c- o>&lt;</c-><c- n>parallel_scheduler</c-><c- o>></c-> <c- n>query_parallel_scheduler_backend</c-><c- p>();</c->

  <c- c1>// Implemented by the frontend.</c->
  <c- k>struct</c-> <c- nc>receiver</c-> <c- p>{</c->
    <c- k>virtual</c-> <c- o>~</c-><c- n>receiver</c-><c- p>()</c-> <c- o>=</c-> <c- k>default</c-><c- p>;</c->

  <c- k>protected</c-><c- o>:</c->
    <c- c1>// exposition only</c->
    <c- k>virtual</c-> <c- b>bool</c-> <i><c- n>query</c-><c- o>-</c-><c- n>env</c-></i><c- p>(</c-><i><c- n>property</c-><c- o>-</c-><c- n>id</c-></i><c- p>,</c-> <c- b>void</c-><c- o>*</c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->

  <c- k>public</c-><c- o>:</c->

    <c- n>receiver</c-><c- p>(</c-><c- k>const</c-> <c- n>receiver</c-><c- o>&amp;</c-><c- p>)</c-> <c- o>=</c-> <c- k>delete</c-><c- p>;</c->
    <c- n>receiver</c-><c- p>(</c-><c- n>receiver</c-><c- o>&amp;&amp;</c-><c- p>)</c-> <c- o>=</c-> <c- k>delete</c-><c- p>;</c->
    <c- n>receiver</c-><c- o>&amp;</c-> <c- k>operator</c-><c- o>=</c-><c- p>(</c-><c- k>const</c-> <c- n>receiver</c-><c- o>&amp;</c-><c- p>)</c-> <c- o>=</c-> <c- k>delete</c-><c- p>;</c->
    <c- n>receiver</c-><c- o>&amp;</c-> <c- k>operator</c-><c- o>=</c-><c- p>(</c-><c- n>receiver</c-><c- o>&amp;&amp;</c-><c- p>)</c-> <c- o>=</c-> <c- k>delete</c-><c- p>;</c->

    <c- k>virtual</c-> <c- b>void</c-> <c- nf>set_value</c-><c- p>()</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- nf>set_error</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>exception_ptr</c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- nf>set_stopped</c-><c- p>()</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->

    <c- k>template</c-> <c- o>&lt;</c-><i><c- k>class</c-><c- o>-</c-><c- n>type</c-></i> <c- n>P</c-><c- o>></c-> <c- c1>// </c-><i><c- c1>class-type</c-></i><c- c1> is defined in [execution.syn]</c->
    <c- n>std</c-><c- o>::</c-><c- n>optional</c-><c- o>&lt;</c-><c- n>P</c-><c- o>></c-> <c- n>try_query</c-><c- p>()</c-> <c- k>noexcept</c-><c- p>;</c->
  <c- p>};</c->

  <c- c1>// Implemented by the frontend.</c->
  <c- k>struct</c-> <c- nc>bulk_item_receiver</c-> <c- o>:</c-> <c- n>receiver</c-> <c- p>{</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- nf>execute</c-><c- p>(</c-><c- b>uint32_t</c-> <c- n>begin</c-><c- p>,</c-> <c- b>uint32_t</c-> <c- n>end</c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
  <c- p>};</c->

  <c- c1>// Implemented by the backend.</c->
  <c- k>struct</c-> <c- nc>parallel_scheduler_backend</c-> <c- p>{</c->
    <c- k>virtual</c-> <c- o>~</c-><c- n>parallel_scheduler_backend</c-><c- p>()</c-> <c- o>=</c-> <c- k>default</c-><c- p>;</c->

    <c- k>virtual</c-> <c- b>void</c-> <c- nf>schedule</c-><c- p>(</c-><c- n>receiver</c-><c- o>&amp;</c-><c- p>,</c-> <c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- nf>schedule_bulk_chunked</c-><c- p>(</c-><c- b>uint32_t</c-><c- p>,</c-> <c- n>bulk_item_receiver</c-><c- o>&amp;</c-><c- p>,</c-> <c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- nf>schedule_bulk_unchunked</c-><c- p>(</c-><c- b>uint32_t</c-><c- p>,</c-> <c- n>bulk_item_receiver</c-><c- o>&amp;</c-><c- p>,</c-> <c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
  <c- p>};</c->
<c- p>}</c->

</pre>
   <ul>
    <li data-md>
     <p class="note" role="note"><span class="marker">Note:</span> for the current exposition we call <em>backend</em> the part of the application that implements a (possibly custom) system context, and <em>frontend</em> the part of the application around <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>parallel_scheduler</c-></code> that uses that  (possibly custom) system context.
The <em>frontend</em> part consists of library code that implements the user-facing API to call the interfaces implemented by the backend.</p>
    <li data-md>
     <p><code class="highlight"><c- n>query_parallel_scheduler_backend</c-></code> returns a non-null shared pointer to an object that implements the <code class="highlight"><c- n>parallel_scheduler_backend</c-></code> interface.</p>
     <ul>
      <li data-md>
       <p class="note" role="note"><span class="marker">Note:</span> it is expected for users to want to have link-time replacements of this function.</p>
     </ul>
    <li data-md>
     <p class="note" role="note"><span class="marker">Note:</span> <code class="highlight"><c- n>receiver</c-></code> and <code class="highlight"><c- n>bulk_item_receiver</c-></code> are interfaces that are implemented by the frontend side; only <code class="highlight"><c- n>parallel_scheduler_backend</c-></code> is expected to be implemented by a system context implementation.</p>
    <li data-md>
     <p><code class="highlight"><c- n>receiver</c-></code> class provides the backend a way to query environment properties from the frontend receiver object.</p>
     <ul>
      <li data-md>
       <p>if, on the frontend side, the sender obtained from a system scheduler is connected to a receiver that has an environment for which <code class="highlight"><c- n>get_stop_token</c-></code> returns an <code class="highlight"><c- n>inplace_stop_token</c-></code> object, then <code class="highlight"><c- n>receiver</c-><c- o>::</c-><c- n>try_query</c-><c- o>&lt;</c-><c- n>inplace_stop_token</c-><c- o>></c-><c- p>()</c-></code> returns an optional of a value equal with the stop token from the environment;</p>
      <li data-md>
       <p class="note" role="note"><span class="marker">Note:</span> depending on the implementation of the frontend, not all the environment properties may be available to the backend.</p>
     </ul>
    <li data-md>
     <p>if <code class="highlight"><c- n>sch</c-></code> is an object that implements <code class="highlight"><c- n>parallel_scheduler_backend</c-></code> interface (and can be returned via <code class="highlight"><c- n>query_parallel_scheduler_backend</c-></code>), then the following must be true:</p>
     <ul>
      <li data-md>
       <p>if <code class="highlight"><c- n>sch</c-><c- p>.</c-><c- n>schedule</c-><c- p>()</c-></code> is called passing <code class="highlight"><c- n>r</c-></code> of type <code class="highlight"><c- n>receiver</c-><c- o>*</c-></code> and <code class="highlight"><c- n>s</c-></code> of type <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-></code>, then:</p>
      <li data-md>
       <p>at least one of <code class="highlight"><c- n>set_value</c-></code>, <code class="highlight"><c- n>set_error</c-></code>, or <code class="highlight"><c- n>set_stopped</c-></code> must be eventually called on <code class="highlight"><c- n>r</c-></code>;</p>
       <ul>
        <li data-md>
         <p><code class="highlight"><c- n>set_value</c-></code> is called to signal a successful scheduling of the work; it must be called on a thread belonging to system execution context;</p>
        <li data-md>
         <p>if <code class="highlight"><c- n>set_value</c-></code> cannot be called, then <code class="highlight"><c- n>set_error</c-></code> must be called to signal the scheduling error;</p>
        <li data-md>
         <p><code class="highlight"><c- n>set_stopped</c-></code> may be called on <code class="highlight"><c- n>r</c-></code> to signal that the execution of work is no longer needed;</p>
       </ul>
      <li data-md>
       <p>the <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-></code> object <code class="highlight"><c- n>s</c-></code> represents a memory region that can be used by the backend to store data needed for the scheduling operation.</p>
      <li data-md>
       <p class="note" role="note"><span class="marker">Note:</span> if the receiver <code class="highlight"><c- n>r</c-></code> exposes a property for a stop token, and stop was requested on that stop token, then <code class="highlight"><c- n>set_stopped</c-></code> may be called, but this is not guaranteed.</p>
     </ul>
    <li data-md>
     <p>if <code class="highlight"><c- n>sch</c-><c- p>.</c-><c- n>schedule_bulk_chunked</c-><c- p>()</c-></code> is called passing <code class="highlight"><c- n>n</c-></code> of type <code class="highlight"><c- b>uint32_t</c-></code>, <code class="highlight"><c- n>r</c-></code> of type <code class="highlight"><c- n>bulk_item_receiver</c-><c- o>*</c-></code> and <code class="highlight"><c- n>s</c-></code> of type <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-></code>, then:</p>
     <ul>
      <li data-md>
       <p>at least one of <code class="highlight"><c- n>set_value</c-></code>, <code class="highlight"><c- n>set_error</c-></code>, or <code class="highlight"><c- n>set_stopped</c-></code> must be eventually called on <code class="highlight"><c- n>r</c-></code>;</p>
       <ul>
        <li data-md>
         <p><code class="highlight"><c- n>set_value</c-></code> is called to signal a successful scheduling of the work; it must be called on a thread belonging to system execution context;</p>
        <li data-md>
         <p>if <code class="highlight"><c- n>set_value</c-></code> cannot be called, then <code class="highlight"><c- n>set_error</c-></code> must be called to signal the scheduling error;</p>
        <li data-md>
         <p><code class="highlight"><c- n>set_stopped</c-></code> may be called on <code class="highlight"><c- n>r</c-></code> to signal that the execution of work is no longer needed;</p>
       </ul>
      <li data-md>
       <p>the <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-></code> object <code class="highlight"><c- n>s</c-></code> represents a memory region that can be used by the backend to store data needed for the scheduling operation.</p>
      <li data-md>
       <p class="note" role="note"><span class="marker">Note:</span> if the receiver <code class="highlight"><c- n>r</c-></code> exposes a property for a stop token, and stop was requested on that stop token, then <code class="highlight"><c- n>set_stopped</c-></code> may be called, but this is not guaranteed.</p>
      <li data-md>
       <p>if <code class="highlight"><c- n>set_value</c-></code> is called on <code class="highlight"><c- n>r</c-></code>, then <code class="highlight"><c- n>start</c-></code> must be called on <code class="highlight"><c- n>r</c-></code> <code class="highlight"><c- n>n</c-></code> times, where <code class="highlight"><c- n>n</c-></code> is the value passed to <code class="highlight"><c- n>schedule_bulk_chunked</c-></code>.</p>
       <ul>
        <li data-md>
         <p>the <code class="highlight"><c- n>start</c-></code> method is called on <code class="highlight"><c- n>r</c-></code> with non-overlapping intervals [<code class="highlight"><c- n>begin</c-></code>, <code class="highlight"><c- n>end</c-></code>) to signal the start of the work for the elements in range  [<code class="highlight"><c- n>begin</c-></code>, <code class="highlight"><c- n>end</c-></code>), where <code class="highlight"><c- mi>0</c-></code> &lt;= <code class="highlight"><c- n>begin</c-></code> &lt; <code class="highlight"><c- n>end</c-></code> &lt;= <code class="highlight"><c- n>n</c-></code>.</p>
        <li data-md>
         <p>the <code class="highlight"><c- n>start</c-></code> method must be called on a thread belonging to the system execution context.</p>
        <li data-md>
         <p>the <code class="highlight"><c- n>start</c-></code> method must be called before <code class="highlight"><c- n>set_value</c-><c- p>()</c-></code> method is called.</p>
       </ul>
      <li data-md>
       <p><code class="highlight"><c- n>schedule_bulk_unchunked</c-></code> does the same thing as <code class="highlight"><c- n>schedule_bulk_chunked</c-></code>, but the calls to <code class="highlight"><c- n>start</c-></code> are using parameters <code class="highlight"><c- p>(</c-><c- n>i</c-><c- p>,</c-> <c- n>i</c-><c- o>+</c-><c- mi>1</c-><c- p>)</c-></code> for <code class="highlight"><c- n>i</c-></code> in <code class="highlight"><c- p>[</c-><c- mi>0</c-><c- p>,</c-> <c- n>n</c-><c- p>)</c-></code>.</p>
      <li data-md>
       <p>if in the process of calling <code class="highlight"><c- n>start</c-></code> on <code class="highlight"><c- n>r</c-></code>, the implementation detects that the work cannot be started, then <code class="highlight"><c- n>set_error</c-></code> must be called on <code class="highlight"><c- n>r</c-></code> to signal the error; in this case <code class="highlight"><c- n>r</c-></code> may not get all the expected <code class="highlight"><c- n>n</c-></code> calls to <code class="highlight"><c- n>start</c-></code>.</p>
      <li data-md>
       <p>if in the process of calling <code class="highlight"><c- n>start</c-></code> on <code class="highlight"><c- n>r</c-></code>, the scheduling process is cancelled, then <code class="highlight"><c- n>set_stopped</c-></code> must be called on <code class="highlight"><c- n>r</c-></code> to signal the cancellation; in this case <code class="highlight"><c- n>r</c-></code> may not get all the expected <code class="highlight"><c- n>n</c-></code> calls to <code class="highlight"><c- n>start</c-></code>.</p>
     </ul>
   </ul>
   <h2 class="heading settled" data-level="5" id="design_considerations"><span class="secno">5. </span><span class="content">Design discussion and decisions</span><a class="self-link" href="#design_considerations"></a></h2>
   <h3 class="heading settled" data-level="5.1" id="drive_not_drive"><span class="secno">5.1. </span><span class="content">To drive or not to drive</span><a class="self-link" href="#drive_not_drive"></a></h3>
    On single-threaded systems (e.g., freestanding implementations) or on systems in which the main thread has special significance (e.g., to run the Qt main loop), it’s important to allow scheduling work on the main thread.
For this, we need the main thread to <em>drive</em> work execution. 
   <p>The earlier version of this paper, <a data-link-type="biblio" href="#biblio-p2079r2" title="System execution context">[P2079R2]</a>, included <code class="highlight"><c- n>execute_all</c-></code> and <code class="highlight"><c- n>execute_chunk</c-></code> operations to integrate with senders.
In this version we have removed them because they imply certain requirements of forward progress delegation on the system context and it is not clear whether or not they should be called.
We envision a separate paper that adds the support for drive-ability, which is decoupled by this paper.</p>
   <p>We can simplify this discussion to a single function:</p>
<pre class="highlight"><c- b>void</c-> <c- nf>drive</c-><c- p>(</c-><c- n>system_context</c-><c- o>&amp;</c-> <c- n>ctx</c-><c- p>,</c-> <c- n>sender</c-> <c- k>auto</c-> <c- n>snd</c-><c- p>);</c->
</pre>
   <p>Let’s assume we have a single-threaded environment, and a means of customizing the system context for this environment.
We know we need a way to donate <code class="highlight"><c- n>main</c-></code>’s thread to this context, it is the only thread we have available.
Assuming that we want a <code class="highlight"><c- n>drive</c-></code> operation in some form, our choices are to:</p>
   <ul>
    <li data-md>
     <p>define our <code class="highlight"><c- n>drive</c-></code> operation, so that it is standard, and we use it on this system.</p>
    <li data-md>
     <p>or allow the customization to define a custom <code class="highlight"><c- n>drive</c-></code> operation related to the specific single-threaded environment.</p>
   </ul>
   <p>With a standard <code class="highlight"><c- n>drive</c-></code> of this sort (or of the more complex design in <a data-link-type="biblio" href="#biblio-p2079r2" title="System execution context">[P2079R2]</a>) we might write an example to use it directly:</p>
<pre class="language-cpp highlight"><c- n>system_context</c-> <c- n>ctx</c-><c- p>;</c->
<c- k>auto</c-> <c- n>snd</c-> <c- o>=</c-> <c- n>on</c-><c- p>(</c-><c- n>ctx</c-><c- p>,</c-> <c- n>doWork</c-><c- p>());</c->
<c- n>drive</c-><c- p>(</c-><c- n>ctx</c-><c- p>,</c-> <c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>snd</c-><c- p>));</c->
</pre>
   <p>Without drive, we rely on an <code class="highlight"><c- n>async_scope</c-></code> to spawn the work and some system-specific drive operation:</p>
<pre class="language-cpp highlight"><c- n>system_context</c-> <c- n>ctx</c-><c- p>;</c->
<c- n>async_scope</c-> <c- n>scope</c-><c- p>;</c->
<c- k>auto</c-> <c- n>snd</c-> <c- o>=</c-> <c- n>on</c-><c- p>(</c-><c- n>ctx</c-><c- p>,</c-> <c- n>doWork</c-><c- p>());</c->
<c- n>scope</c-><c- p>.</c-><c- n>spawn</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>snd</c-><c- p>));</c->
<c- n>custom_drive_operation</c-><c- p>(</c-><c- n>ctx</c-><c- p>);</c->
</pre>
   <p>Neither of the two variants is very portable.
The first variant requires applications that don’t care about drive-ability to call <code class="highlight"><c- n>drive</c-></code>, while the second variant requires custom pluming to tie the main thread with the system scheduler.</p>
   <p>We envision a new paper that adds support for a <em>main scheduler</em> similar to the <em>system scheduler</em>.
The main scheduler, for hosted implementations would be typically different than the system scheduler.
On the other hand, on freestanding implementations, the main scheduler and system scheduler can share the same underlying implementation, and both of them can execute work on the main thread; in this mode, the main scheduler is required to be driven, so that system scheduler can execute work.</p>
   <p>Keeping those two topic as separate papers allows to make progress independently.</p>
   <h3 class="heading settled" data-level="5.2" id="freestanding_implementations"><span class="secno">5.2. </span><span class="content">Freestanding implementations</span><a class="self-link" href="#freestanding_implementations"></a></h3>
   <p>This paper payed attention to freestanding implementations, but doesn’t make any wording proposals for them.
We express a strong desire for the system scheduler to work on freestanding implementations, but leave the details to a different paper.</p>
   <p>We envision that, a followup specification will ensure that the system scheduler will work in freestanding implementations by sharing the implementation with the main scheduler, which is driven by the main thread.</p>
   <h3 class="heading settled" data-level="5.3" id="replaceable_system_context"><span class="secno">5.3. </span><span class="content">Making system context replaceable</span><a class="self-link" href="#replaceable_system_context"></a></h3>
   <p>The system context aims to allow people to implement an application that is dependent only on parallel forward progress and to port it to a wide range of systems.
As long as an application does not rely on concurrency, and restricts itself to only the system context, we should be able to scale from single threaded systems to highly parallel systems.</p>
   <p>In the extreme, this might mean porting to an embedded system with a very specific idea of an execution context.
Such a system might not have a multi-threading support at all, and thus the system context not only runs with single thread,
but actually runs on the system’s only thread. We might build the context on top of a UI thread, or we might want to swap
out the system-provided implementation with one from a vendor (like Intel) with experience writing optimized threading
runtimes.</p>
   <p>The latter is also important for the composability of the existing code with the system context, i.e., if
Intel Threading building blocks (oneTBB) is used by somebody and they want to start using the system context as well, it’s
likely that the users want to replace system context implementation with oneTBB because in that case they would have
one thread pool and work scheduler underneath.</p>
   <p>We should allow customization of the system context to cover this full range of cases.</p>
   <p>To achieve this we see options:</p>
   <ol>
    <li data-md>
     <p>Link-time replaceability. This could be achieved using weak symbols, or by choosing a runtime library to pull in using build options.</p>
    <li data-md>
     <p>Run-time replaceability. This could be achieved by subclassing and requiring certain calls to be made early in the process.</p>
    <li data-md>
     <p>Compile-time replaceability. This could be achieved by importing different headers, by macro definitions on the command line or various other mechanisms.</p>
   </ol>
   <p>Link-time replaceability has the following characteristics:</p>
   <ul>
    <li data-md>
     <p>Pro: we have precedence in the standard: this is similar to replacing <code class="highlight"><c- k>operator</c-> <c- k>new</c-></code>.</p>
    <li data-md>
     <p>Pro: more predictable, in that it can be guaranteed to be application-global.</p>
    <li data-md>
     <p>Pro: some of the type erasure and indirection can be removed in practice with link-time optimization.</p>
    <li data-md>
     <p>Con: it requires defining the ABI and thus, in some cases, would require some type erasure and some inefficiency.</p>
    <li data-md>
     <p>Con: harder to get it correctly with shared libraries (e.g., DLLs might have different replaced versions of the system scheduler).</p>
    <li data-md>
     <p>Con: the replacement might depend on the order of linking.</p>
   </ul>
   <p>Run-time replaceability has the following characteristics:</p>
   <ul>
    <li data-md>
     <p>Pro: we have precedence in the standard: this is similar to <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>set_terminate</c-><c- p>()</c-></code>.</p>
    <li data-md>
     <p>Pro: easier to achieve consistent behavior on applications with shared libraries (e.g., Windows has the same version of C++ standard library in DLL).</p>
    <li data-md>
     <p>Pro: a program can have multiple implementations of system scheduler.</p>
    <li data-md>
     <p>Con: race conditions between replacing the system scheduler and using it to spawn work (for buggy implementations).</p>
    <li data-md>
     <p>Con: race conditions between using the scheduler and replacing it, which makes the program hard to follow.</p>
    <li data-md>
     <p>Con: implies going over an ABI, and cannot be optimized at link-time.</p>
    <li data-md>
     <p>Con: different implementation may allocate resources for the system scheduler at startup, and then, at the start of main, the implementation is replaced (this is mainly a QOI issue).</p>
   </ul>
   <p>Compile-time replaceability has the following characteristics:</p>
   <ul>
    <li data-md>
     <p>Pro: users can do this with a type-def that can be used everywhere and switched.</p>
    <li data-md>
     <p>Con: potential problems with ODR violations.</p>
    <li data-md>
     <p>Con: doesn’t support shareability across different binaries of the same process</p>
   </ul>
   <p>The paper considers compile-time replaceability as not being a viable option because it easily breaks one of the fundamental
design principles of a system context, i.e. having one, shared, application-wide execution context, which avoids
oversubscription.</p>
   <p>After discussing run-time replaceability in SG1, in Hagenberg, we decided to also drop run-time replaceability.
Thus, the only remaining option is link-time replaceability.</p>
   <p>Replaceability is also part of the <a data-link-type="biblio" href="#biblio-p2900r8" title="Contracts for C++">[P2900R8]</a> proposal for the contract-violation handler.
The paper proposes that whether the handler is replaceable to be implementation-defined.
If an implementation chooses to support replaceability, it shall be done similar to replacing the global <code class="highlight"><c- k>operator</c-> <c- k>new</c-></code> and <code class="highlight"><c- k>operator</c-> <c- k>delete</c-></code> (link-time replaceability).</p>
   <p>The replaceability topic is highly controversial.
Some people think that link-time replaceability is the way to go; Adobe supports this position.
Others think that run-time replaceability is the way to go; Bloomberg supports this latter position.</p>
   <p>The feedback we received from Microsoft, is that they will likely not support replaceability on their platforms.
They would prefer that we offer implementations an option to not implement replaceability.
Moreover, for systems where replaceability is supported they would prefer to make the replaceability mechanism to be implementation defined.</p>
   <p>The authors disagree with the idea that replaceability is not needed for Windows platforms (or other platforms that provide an OS scheduler).
The OS scheduler is optimized for certain workloads, and it’s not the best choice for all workloads.
This way not providing replaceability options have the following drawbacks:</p>
   <ul>
    <li data-md>
     <p>it limits the ability to hand-tune the performance of the application (when system scheduler is used);</p>
    <li data-md>
     <p>it limits the <code class="highlight"><c- n>parallel_scheduler</c-></code> ability to be used in for CPU-intensive workloads;</p>
    <li data-md>
     <p>it limits the <code class="highlight"><c- n>parallel_scheduler</c-></code> ability to be used for platforms with accelerators;</p>
    <li data-md>
     <p>it limits the composability of the system context with other parallel runtimes (while avoiding oversubscription).</p>
   </ul>
   <p>The poll taken in Wrocław, Poland, November 2024, showed that the majority of the participants support mandating replaceability, as well as specifying the mechanism of replaceability and the API for replaceability.</p>
   <p>In accordance with the feedback, and the beliefs of the authors, the paper proposes the following:</p>
   <ul>
    <li data-md>
     <p>mandate replaceability</p>
    <li data-md>
     <p>make the replaceability mechanism to be link-time</p>
    <li data-md>
     <p>define a replaceability API</p>
   </ul>
   <h3 class="heading settled" data-level="5.4" id="replaceability_details"><span class="secno">5.4. </span><span class="content">Replaceability details</span><a class="self-link" href="#replaceability_details"></a></h3>
   <p>To replace the system scheduler, the user needs to do the following:</p>
   <ul>
    <li data-md>
     <p>Implement a system scheduler behind the <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>parallel_scheduler_backend</c-></code> interface.</p>
    <li data-md>
     <p>Follow the implementation instructions to replace the <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>query_parallel_scheduler_backend</c-></code> symbol, with a function that returns the desired backend implementation.</p>
   </ul>
   <p>If parallel scheduler backend is replaced, the entire program will only see the replacement, and not the default implementation.
However, the parallel scheduler backend object might be destroyed before other objects that depend on it.
In this case, the link-time replaced function is called again to create a new new parallel scheduler backend.
Thus, multiple parallel scheduler backends can be created, but only one of them is active at a time.</p>
   <h3 class="heading settled" data-level="5.5" id="extensibility"><span class="secno">5.5. </span><span class="content">Extensibility</span><a class="self-link" href="#extensibility"></a></h3>
   <p>The <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>execution</c-></code> framework is expected to grow over time.
We expect to add time-based scheduling, async I/O, priority-based scheduling, and other for now unforeseen functionality.
The system context framework needs to be designed in such a way that it allows for extensibility.</p>
   <p>Whatever the replaceability mechanism is, we need to ensure that new features can be added to the system context in a backwards-compatible manner.</p>
   <p>There are two levels in which we can extend the system context:</p>
   <ol>
    <li data-md>
     <p>Add more types of schedulers, beside the system scheduler.</p>
    <li data-md>
     <p>Add more features to the existing scheduler.</p>
   </ol>
   <p>The first type of extensibility can easily be solved by adding new getters for the new types of schedulers.
Different types of schedulers should be able to be replaced separately; e.g., one should be able to replace the I/O scheduler without replacing the system scheduler.
The discussed replaceability mechanisms support this.</p>
   <p>To extend existing schedulers, one can pass properties to it, via the receiver.
For example, adding priorities to the system scheduler can be done by adding a priority property to the type-erased receiver object.
The list of properties that can be passed to the backend is not finite; however both the frontend and the backend must have knowledge about the supported properties.</p>
   <h3 class="heading settled" data-level="5.6" id="shareability"><span class="secno">5.6. </span><span class="content">Shareability</span><a class="self-link" href="#shareability"></a></h3>
   <p>One of the motivations of this paper is to stop the proliferation of local thread pools, which can lead to CPU oversubscription.
If multiple binaries are used in the same process, we don’t want each binary to have its own implementation of system context.
Instead, we would want to share the same underlying implementation.</p>
   <p>The paper mandates shareability, but leaves the details of shareability to be implementation-defined (they are different for each backend).</p>
   <h3 class="heading settled" data-level="5.7" id="performance"><span class="secno">5.7. </span><span class="content">Performance</span><a class="self-link" href="#performance"></a></h3>
   <p>To support shareability and replaceability, system context calls may need to go across binary boundaries, over the defined API.
A common approach for this is to have COM-like objects.
However, the problem with that approach is that it requires memory allocation, which might be a costly operation.
This becomes problematic if we aim to encourage programmers to use the system context for spawning work in a concurrent system.</p>
   <p>While there are some costs associated with implementing all the goals stated here, we want the implementation of the system context to be as efficient as possible.
For example, a good implementation should avoid memory allocation for the common case in which the default implementation is utilized for a platform.</p>
   <p>This paper cannot recommend the specific implementation techniques that should be used to maximize performance; these are considered Quality of Implementation (QOI) details.</p>
   <h3 class="heading settled" data-level="5.8" id="lifetime"><span class="secno">5.8. </span><span class="content">Lifetime</span><a class="self-link" href="#lifetime"></a></h3>
   <p>Underneath the system scheduler, there is a singleton of some sort.
We need to specify the lifetime of this object and everything that derives from it.</p>
   <p>Revision R4 of the paper mandates that the lifetime of any <code class="highlight"><c- n>system_context</c-></code> must be fully contained within the lifetime of <code class="highlight"><c- n>main</c-><c- p>()</c-></code>.
The reasoning behind this is that ensuring proper construction and destruction order of static objects is typically difficult in practice.
This is especially challenging during the destruction of static objects; and, by symmetry, we also did not want to guarantee the lifetime of the system scheduler before <code class="highlight"><c- n>main</c-><c- p>()</c-></code>.
We argued that if we took a stricter approach, we could always relax it later.</p>
   <p>We received feedback that this was too strict.
First, there are many applications where the C++ part does not have a <code class="highlight"><c- n>main</c-><c- p>()</c-></code> function.
Secondly, this can be considered a quality of implementation issue; implementations can always use a Phoenix singleton pattern to ensure that the underlying system context object remains alive for the duration of the entire program.</p>
   <p>R5 revision of the paper relaxes the lifetime requirements of the system scheduler. The system scheduler can now be used in any part of a C++ program.</p>
   <h3 class="heading settled" data-level="5.9" id="expose_system_context_name"><span class="secno">5.9. </span><span class="content">Need for the <code class="highlight"><c- n>system_context</c-></code> class</span><a class="self-link" href="#expose_system_context_name"></a></h3>
    Our goal is to expose a global shared context to avoid oversubscription of threads in the system and to efficiently share a system thread pool.
Underneath the <code class="highlight"><c- n>system_context</c-></code> there is a singleton of some sort, potentially owned by the OS. 
   <p>The question is how we expose the singleton.
We have a few obvious options:</p>
   <ul>
    <li data-md>
     <p>Explicit context objects, as we’ve described in R2, R3 and R4 of this paper, where a <code class="highlight"><c- n>system_context</c-></code> is constructed as any other context might be, and refers to a singleton underneath.</p>
    <li data-md>
     <p>A global <code class="highlight"><c- n>get_system_context</c-><c- p>()</c-></code> function that obtains a <code class="highlight"><c- n>system_context</c-></code> object, or a reference to one, representing the singleton explicitly.</p>
    <li data-md>
     <p>A global <code class="highlight"><c- n>get_parallel_scheduler</c-><c- p>()</c-></code> function that obtains a scheduler from some singleton system context, but does not explicitly expose the context.</p>
   </ul>
   <p>In R4 and earlier revisions, we opted for an explicit context object.
The reasoning was that providing explicit contexts makes it easier to understand the lifetime of the schedulers.
However, adding this extra class does not affect how one would reason about the lifetime of the schedulers or the work scheduled on them.
Therefore, introducing an artificial scope object becomes an unnecessary burden.</p>
   <p>There were also arguments made for adding <code class="highlight"><c- n>system_context</c-></code> so that we can later add properties to it, that don’t necessarily belong to <code class="highlight"><c- n>parallel_scheduler</c-></code>.
However, if we would later find such properties, nothing prevents us to add <code class="highlight"><c- n>system_context</c-></code> class later, and make <code class="highlight"><c- n>get_parallel_scheduler</c-><c- p>()</c-></code> return <code class="highlight"><c- n>get_system_context</c-><c- p>().</c-><c- n>get_parallel_scheduler</c-><c- p>()</c-></code>.</p>
   <p>Thus, the paper simply proposes a <code class="highlight"><c- n>get_parallel_scheduler</c-><c- p>()</c-></code> function that returns a the system scheduler.
The system context is implementation-defined and not exposed to the user.</p>
   <h3 class="heading settled" data-level="5.10" id="environment"><span class="secno">5.10. </span><span class="content">Backend environment</span><a class="self-link" href="#environment"></a></h3>
    For custom backend implementations, it is often necessary access properties of the environment that is connected to the sender that triggers a schedule operation.
Because the backend is behind a type-erased boundary, the environment that can be passed to the backend also needs to be type-erased. 
   <p>We’ve added the possibility to encode environment properties in the receiver object.
The backend can query the receiver for environment properties by using the <code class="highlight"><c- n>try_query</c-></code> template method, passing the type of the property that needs querying.
If the property is available, the method returns an optional with the value of the property; otherwise it returns an empty optional.</p>
   <p>The backend can query the receiver object for the entire lifetime of the asynchronous operation (until one of the completion signals is called).</p>
   <p>One of the implication for using types to query properties is that the exchange of environment properties needs to use concrete types, and cannot use concepts.
If, for example, the backend needs to obtain a stop token, it needs to ask for a specific stop token type (like <code class="highlight"><c- n>inplace_stop_token</c-></code>), and not for a <code class="highlight"><c- n>stoppable_token</c-></code> concept.
As another example, if the backend needs an allocator, it needs to ask for a specific allocator type, and not use <code class="highlight"><c- n>simple</c-><c- o>-</c-><c- n>allocator</c-></code> concept.</p>
   <p>At this point, the paper requires that only <code class="highlight"><c- n>inplace_stop_token</c-></code> is supported by the type-erased receiver object.
Other types might be supported, but it is not required.</p>
   <p>The authors envision that the list of supported properties will grow over time.</p>
   <h3 class="heading settled" data-level="5.11" id="priorities"><span class="secno">5.11. </span><span class="content">Priorities</span><a class="self-link" href="#priorities"></a></h3>
    It’s broadly accepted that we need some form of priorities to tweak the behavior of the system context.
This paper does not include priorities, though early drafts of R2 did.
We had different designs in flight for how to achieve priorities and decided they could be added later in either approach. 
   <p>The first approach is to expand one or more of the APIs.
The obvious way to do this would be to add a priority-taking version of <code class="highlight"><c- n>system_context</c-><c- o>::</c-><c- n>get_scheduler</c-><c- p>()</c-></code>:</p>
<pre class="language-cpp highlight"><c- n>implementation</c-><c- o>-</c-><c- n>defined</c-><c- o>-</c-><c- n>parallel_scheduler</c-> <c- n>get_scheduler</c-><c- p>();</c->
<c- n>implementation</c-><c- o>-</c-><c- n>defined</c-><c- o>-</c-><c- n>parallel_scheduler</c-> <c- n>get_scheduler</c-><c- p>(</c-><c- n>priority_t</c-> <c- n>priority</c-><c- p>);</c->
</pre>
   <p>This approach would offer priorities at scheduler granularity and apply to large sections of a program at once.</p>
   <p>The other approach, which matches the receiver query approach taken elsewhere in <a data-link-type="biblio" href="#biblio-p2300r10" title="`std::execution`">[P2300R10]</a> is to add a <code class="highlight"><c- n>get_priority</c-><c- p>()</c-></code> query on the receiver, which, if available, passes a priority to the scheduler in the same way that we pass an <code class="highlight"><c- n>allocator</c-></code> or a <code class="highlight"><c- n>stop_token</c-></code>.
This would work at task granularity, for each <code class="highlight"><c- n>schedule</c-><c- p>()</c-></code> call that we connect a receiver to we might pass a different priority.</p>
   <p>In either case we can add the priority in a separate paper.
It is thus not urgent that we answer this question, but we include the discussion point to explain why they were removed from the paper.</p>
   <h3 class="heading settled" data-level="5.12" id="diagram"><span class="secno">5.12. </span><span class="content">Interaction between frontend and backend</span><a class="self-link" href="#diagram"></a></h3>
   <p>The functionality of the parallel scheduler that will be used by end-users (frontend) is implemented in terms of a "backend" that can be replaced.
The following diagram shows the interaction between the frontend and backend parts of the parallel scheduler.</p>
   <p><img alt="Parallel scheduler diagram" src="data:image/jpg;base64,/9j/4Q/+RXhpZgAATU0AKgAAAAgABgESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAAITAAMAAAABAAEAAIdpAAQAAAABAAAAZgAAAAAAAABIAAAAAQAAAEgAAAABAAeQAAAHAAAABDAyMjGRAQAHAAAABAECAwCgAAAHAAAABDAxMDCgAQADAAAAAQABAACgAgAEAAAAAQAAAhmgAwAEAAAAAQAAA4akBgADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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" width="400"></p>
   <p>In the first part of the image, we show how the backend will start multipel threads and call <code class="highlight"><c- n>start</c-><c- p>()</c-></code> on the receiver multiple times, which will in turn, call the function given by the user.</p>
   <p>In the second part of the image, because the <code class="highlight"><c- n>seq</c-></code> execution policy was given, we call <code class="highlight"><c- n>start</c-><c- p>()</c-></code> only once, and the frontend implementation will call <code class="highlight"><c- n>f</c-></code> multiple times sequentially.</p>
   <h3 class="heading settled" data-level="5.13" id="reference_implementation"><span class="secno">5.13. </span><span class="content">Reference implementation</span><a class="self-link" href="#reference_implementation"></a></h3>
   <p>The authors prepared a reference implementation in <a href="https://github.com/NVIDIA/stdexec">stdexec</a></p>
   <p>A few key points of the implementation:</p>
   <ul>
    <li data-md>
     <p>The implementation is divided into two parts: "frontend" and "backend". The frontend part implements the API defined in this paper and calls the backend for the actual implementation. The backend provides the actual implementation of the system context.</p>
    <li data-md>
     <p>Allows link-time replaceability for <code class="highlight"><c- n>system_scheduler</c-></code>. Provides examples on doing this.</p>
    <li data-md>
     <p>(not to spec) Allows run-time replaceability for <code class="highlight"><c- n>system_scheduler</c-></code>. Provides examples on doing this.</p>
    <li data-md>
     <p>Defines a replaceability API between the frontend and backend parts. This way, one can easily extend this interface when new features need to be added to system context.</p>
    <li data-md>
     <p>Uses preallocated storage on the frontend side, so that the default implementation doesn’t need to allocate memory on the heap when adding new work to <code class="highlight"><c- n>system_scheduler</c-></code>.</p>
    <li data-md>
     <p>Uses a Phoenix singleton pattern to ensure that the system scheduler is alive when needed.</p>
    <li data-md>
     <p>As the default implementation is created outside of the frontend part, it can be shared between multiple binaries in the same process.</p>
    <li data-md>
     <p>uses a <code class="highlight"><c- n>static_thread_pool</c-></code>-based implementation as a default on generic platforms, and using <code class="highlight"><c- n>libdispatch</c-></code> as default implementation on MacOS</p>
   </ul>
   <h3 class="heading settled" data-level="5.14" id="addressing_feedback"><span class="secno">5.14. </span><span class="content">Addressing received feedback</span><a class="self-link" href="#addressing_feedback"></a></h3>
   <h4 class="heading settled" data-level="5.14.1" id="borrow_threads"><span class="secno">5.14.1. </span><span class="content">Allow for system context to borrow threads</span><a class="self-link" href="#borrow_threads"></a></h4>
    Early feedback on the paper from Sean Parent suggested a need for the system context to support a configuration where it carries no threads of its own and takes over the main thread.
While in <a data-link-type="biblio" href="#biblio-p2079r2" title="System execution context">[P2079R2]</a> we proposed <code class="highlight"><c- n>execute_chunk</c-></code> and <code class="highlight"><c- n>execute_all</c-></code>, these enforce a particular implementation on the underlying execution context.
Instead, we simplify the proposal by removing this functionality and assuming that it is implemented by link-time or run-time replacement of the context.
We assume that the underlying mechanism to drive the context, should one be necessary, is implementation-defined.
This allows for custom hooks into an OS thread pool, or a simple <code class="highlight"><c- n>drive</c-><c- p>()</c-></code> method in main. 
   <p>As we discussed previously, a separate paper is supposed to take care of the drive-ability aspect.</p>
   <h4 class="heading settled" data-level="5.14.2" id="wtp_and_gcd"><span class="secno">5.14.2. </span><span class="content">Allow implementations to use Grand Central Dispatch and Windows Thread Pool</span><a class="self-link" href="#wtp_and_gcd"></a></h4>
   <p>In the current form of the paper, we allow implementations to define the best choice for implementing the system context for a particular system.
This includes using Grand Central Dispatch on Apple platforms and Windows Thread Pool on Windows.</p>
   <p>In addition, we propose implementations to allow the replaceability of the system context implementation.
This means that users should be allowed to write their own system context implementations that depend on OS facilities or
a necessity to use some vendor (like Intel) specific solutions for parallelism.</p>
   <h4 class="heading settled" data-level="5.14.3" id="priorities_and_elastic_pools"><span class="secno">5.14.3. </span><span class="content">Priorities and elastic pools</span><a class="self-link" href="#priorities_and_elastic_pools"></a></h4>
   <p>Feedback from Sean Parent:</p>
   <blockquote>
    <p>There is so much in that proposal that is not specified. What requirements are placed on the system scheduler? Most system schedulers support priorities and are elastic (i.e., blocking in the system thread pool will spin up additional threads to some limit).</p>
   </blockquote>
   <p>The lack of details in the specification is intentional, allowing implementers to make the best compromises for each platform.
As different platforms have different needs, constraints, and optimization goals, the authors believe that it is in the best interest of the users to leave some of these details as Quality of Implementation (QOI) details.</p>
   <h4 class="heading settled" data-level="5.14.4" id="less_portability_with_implementation_defined"><span class="secno">5.14.4. </span><span class="content">Implementation-defined may make things less portable</span><a class="self-link" href="#less_portability_with_implementation_defined"></a></h4>
   <p>Some feedback gathered during discussions on this paper suggested that having many aspects of the paper to be implementation-defined would reduce the portability of the system context.</p>
   <p>While it is true that people that would want to replace the system scheduler will have a harder time doing so, this will not affect the users of the system scheduler.
They would still be able to the use system context and system scheduler without knowing the implementation details of those.</p>
   <p>We have a precedence in the C++ standard for this approach with the global allocator.</p>
   <h4 class="heading settled" data-level="5.14.5" id="replaceability_not_needed"><span class="secno">5.14.5. </span><span class="content">Replaceability is not needed (at least on Windows)</span><a class="self-link" href="#replaceability_not_needed"></a></h4>
   <p>Microsoft provided feedback that they will likely not support replaceability on their platforms.
The feedback we received from Microsoft, is that they will likely not support replaceability on their platforms.
They would prefer that we offer implementations an option to not implement replaceability.
Moreover, for systems where replaceability is supported they would prefer to make the replaceability mechanism to be implementation defined.</p>
   <p>The authors disagree with the idea that replaceability is not needed for Windows platforms (or other platforms that provide an OS scheduler).
The OS scheduler is optimized for certain workloads, and it’s not the best choice for all workloads.
This way not providing replaceability options have the following drawbacks:</p>
   <ul>
    <li data-md>
     <p>it limits the ability to hand-tune the performance of the application (when system scheduler is used);</p>
    <li data-md>
     <p>it limits the <code class="highlight"><c- n>parallel_scheduler</c-></code> ability to be used in for CPU-intensive workloads;</p>
    <li data-md>
     <p>it limits the <code class="highlight"><c- n>parallel_scheduler</c-></code> ability to be used for platforms with accelerators;</p>
    <li data-md>
     <p>it limits the composability of the system context with other parallel runtimes (while avoiding oversubscription).</p>
   </ul>
   <p>The poll taken in Wrocław, Poland, November 2024, showed that the majority of the participants support mandating replaceability, as well as specifying the mechanism of replaceability and the API for replaceability.</p>
   <h2 class="heading settled" data-level="6" id="specification"><span class="secno">6. </span><span class="content">Specification</span><a class="self-link" href="#specification"></a></h2>
   <h3 class="heading settled" data-level="6.1" id="wording_version"><span class="secno">6.1. </span><span class="content">Header <code class="highlight"><c- o>&lt;</c-><c- n>version</c-><c- o>></c-></code> synopsis 17.3.2 [version.syn]</span><a class="self-link" href="#wording_version"></a></h3>
   <p>To the <code class="highlight"><c- o>&lt;</c-><c- n>version</c-><c- o>></c-></code> synopsis 17.3.2 [version.syn], add the following:</p>
<pre class="highlight"><c- cp>#define __cpp_lib_syncbuf                           201803L </c-><c- c1>// also in &lt;syncstream></c->
<ins><c- cp>#define __cpp_lib_parallel_scheduler                2025XXL </c-><c- c1>// also in &lt;execution></c-></ins>
<c- cp>#define __cpp_lib_text_encoding                     202306L </c-><c- c1>// also in &lt;text_encoding></c->
</pre>
   <h3 class="heading settled" data-level="6.2" id="wording_syn"><span class="secno">6.2. </span><span class="content">8.2 Header <code class="highlight"><c- o>&lt;</c-><c- n>execution</c-><c- o>></c-></code> synopsis 34.4 [execution.syn]</span><a class="self-link" href="#wording_syn"></a></h3>
   <p>To the <code class="highlight"><c- o>&lt;</c-><c- n>execution</c-><c- o>></c-></code> synopsis 34.4 [execution.syn], add the following at the end of the code block:</p>
   <div class="block-insert">
<pre class="highlight"><c- k>namespace</c-> <c- nn>std</c-><c- o>::</c-><c- nn>execution</c-> <c- p>{</c->
  <c- c1>// [exec.parallel.scheduler]</c->
  <c- k>class</c-> <c- nc>parallel_scheduler</c-> <c- p>{</c-> <i><c- n>unspecified</c-></i> <c- p>};</c->
  <c- n>parallel_scheduler</c-> <c- nf>get_parallel_scheduler</c-><c- p>();</c->
<c- p>}</c->

<c- c1>// [exec.sysctxrepl]</c->
<c- k>namespace</c-> <c- nn>std</c-><c- o>::</c-><c- nn>execution</c-><c- o>::</c-><c- nn>system_context_replaceability</c-> <c- p>{</c->
  <c- k>struct</c-> <c- nc>parallel_scheduler_backend</c-><c- p>;</c->

  <c- n>shared_ptr</c-><c- o>&lt;</c-><c- n>parallel_scheduler_backend</c-><c- o>></c-> <c- n>query_parallel_scheduler_backend</c-><c- p>();</c->

  <c- k>struct</c-> <c- nc>receiver</c-> <c- p>{</c->
    <c- k>virtual</c-> <c- o>~</c-><c- n>receiver</c-><c- p>()</c-> <c- o>=</c-> <c- k>default</c-><c- p>;</c->

    <c- n>receiver</c-><c- p>(</c-><c- k>const</c-> <c- n>receiver</c-><c- o>&amp;</c-><c- p>)</c-> <c- o>=</c-> <c- k>delete</c-><c- p>;</c->
    <c- n>receiver</c-><c- p>(</c-><c- n>receiver</c-><c- o>&amp;&amp;</c-><c- p>)</c-> <c- o>=</c-> <c- k>delete</c-><c- p>;</c->
    <c- n>receiver</c-><c- o>&amp;</c-> <c- k>operator</c-><c- o>=</c-><c- p>(</c-><c- k>const</c-> <c- n>receiver</c-><c- o>&amp;</c-><c- p>)</c-> <c- o>=</c-> <c- k>delete</c-><c- p>;</c->
    <c- n>receiver</c-><c- o>&amp;</c-> <c- k>operator</c-><c- o>=</c-><c- p>(</c-><c- n>receiver</c-><c- o>&amp;&amp;</c-><c- p>)</c-> <c- o>=</c-> <c- k>delete</c-><c- p>;</c->

  <c- k>protected</c-><c- o>:</c->
    <c- c1>// exposition only</c->
    <c- k>virtual</c-> <c- b>bool</c-> <i><c- n>query</c-><c- o>-</c-><c- n>env</c-></i><c- p>(</c-><i><c- n>property</c-><c- o>-</c-><c- n>id</c-></i><c- p>,</c-> <c- b>void</c-><c- o>*</c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->

  <c- k>public</c-><c- o>:</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- n>set_value</c-><c- p>()</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- nf>set_error</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>exception_ptr</c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- nf>set_stopped</c-><c- p>()</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->

    <c- k>template</c-> <c- o>&lt;</c-><i><c- k>class</c-><c- o>-</c-><c- n>type</c-></i> <c- n>P</c-><c- o>></c->
    <c- n>std</c-><c- o>::</c-><c- n>optional</c-><c- o>&lt;</c-><c- n>P</c-><c- o>></c-> <c- n>try_query</c-><c- p>()</c-> <c- k>noexcept</c-><c- p>;</c->
  <c- p>};</c->

  <c- k>struct</c-> <c- nc>bulk_item_receiver</c-> <c- o>:</c-> <c- n>receiver</c-> <c- p>{</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- nf>execute</c-><c- p>(</c-><c- b>uint32_t</c-><c- p>,</c-> <c- b>uint32_t</c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
  <c- p>};</c->

  <c- k>struct</c-> <c- nc>parallel_scheduler_backend</c-> <c- p>{</c->
    <c- k>virtual</c-> <c- o>~</c-><c- n>parallel_scheduler_backend</c-><c- p>()</c-> <c- o>=</c-> <c- k>default</c-><c- p>;</c->

    <c- k>virtual</c-> <c- b>void</c-> <c- nf>schedule</c-><c- p>(</c-><c- n>receiver</c-><c- o>&amp;</c-><c- p>,</c-> <c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- nf>schedule_bulk_chunked</c-><c- p>(</c-><c- b>uint32_t</c-><c- p>,</c-> <c- n>bulk_item_receiver</c-><c- o>&amp;</c-><c- p>,</c->
      <c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
    <c- k>virtual</c-> <c- b>void</c-> <c- nf>schedule_bulk_unchunked</c-><c- p>(</c-><c- b>uint32_t</c-><c- p>,</c-> <c- n>bulk_item_receiver</c-><c- o>&amp;</c-><c- p>,</c->
      <c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c->
  <c- p>};</c->
<c- p>}</c->
</pre>
   </div>
   <h3 class="heading settled" data-level="6.3" id="wording_parallel_scheduler"><span class="secno">6.3. </span><span class="content">Parallel scheduler</span><a class="self-link" href="#wording_parallel_scheduler"></a></h3>
   <p>Add the following as a new subsection at the end of 33 <a data-link-type="biblio" href="#biblio-exec" title="Working Draft: Programming Languages — C++ -- Execution control library">[exec]</a>:</p>
   <div class="block-insert">
     <b>33.N Parallel scheduler [exec.parallel.scheduler]</b> 
    <ol>
     <li data-md>
      <p><code class="highlight"><c- n>parallel_scheduler</c-></code> is a class type that models the <code class="highlight"><c- n>scheduler</c-></code> concept.</p>
      <ul>
       <li data-md>
        <p><span class="enote">The underlying parallel execution context can be system provided, shared between applications, aiming to avoiding oversubscription.</span></p>
       <li data-md>
        <p><span class="enote">The intended use for system scheduler is to have the parallel execution context shared between applications.</span></p>
      </ul>
     <li data-md>
      <p><code class="highlight"><c- n>get_parallel_scheduler</c-></code> returns a scheduler object that represents a parallel execution context that is shared within the application.</p>
     <li data-md>
      <p><i>Returns:</i> An instance of the <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>parallel_scheduler</c-></code> class type.</p>
     <li data-md>
      <p><i>Effects:</i></p>
      <ul>
       <li data-md>
        <p>Calls <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>query_parallel_scheduler_backend</c-><c- p>()</c-></code> to obtain an object of the <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>parallel_scheduler_backend</c-></code> type and associates this object with the returned <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>parallel_scheduler</c-></code> object.</p>
       <li data-md>
        <p>If the object returned by <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>query_parallel_scheduler_backend</c-><c- p>()</c-></code> is <code class="highlight"><c- k>nullptr</c-></code>, <code class="highlight"><c- n>terminate</c-><c- p>()</c-></code> ([except.terminate]) is called.</p>
      </ul>
     <li data-md>
      <p><i>Remarks:</i></p>
      <ul>
       <li data-md>
        <p>If the user does not specify a custom <code class="highlight"><c- n>parallel_scheduler_backend</c-></code> object (see [exec.sysctxrepl]), a default is provided by the implementation.</p>
      </ul>
     <li data-md>
      <p>Let <code class="highlight"><c- n>sch</c-></code> be an object of type <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>parallel_scheduler</c-></code>, and let <i><code class="highlight"><c- n>backend</c-><c- o>-</c-><c- n>of</c-></code></i> be a function such that an expression <i><code class="highlight"><c- n>backend</c-><c- o>-</c-><c- n>of</c-></code></i><code class="highlight"><c- p>(</c-><c- n>sch</c-><c- p>)</c-></code> returns an object of the <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>parallel_scheduler_backend</c-></code> type, associated with <code class="highlight"><c- n>sch</c-></code>.</p>
     <li data-md>
      <p>The expression <code class="highlight"><c- n>get_forward_progress_guarantee</c-><c- p>(</c-><c- n>sch</c-><c- p>)</c-></code> returns <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>parallel</c-></code>.</p>
     <li data-md>
      <p>Let <code class="highlight"><c- n>sch2</c-></code> an object of the <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>parallel_scheduler</c-></code> type. The two objects <code class="highlight"><c- n>sch</c-></code> and <code class="highlight"><c- n>sch2</c-></code> compare equal if and only if <i><code class="highlight"><c- n>backend</c-><c- o>-</c-><c- n>of</c-></code></i><code class="highlight"><c- p>(</c-><c- n>sch</c-><c- p>)</c-> <c- o>==</c-> </code><i><code class="highlight"><c- n>backend</c-><c- o>-</c-><c- n>of</c-></code></i><code class="highlight"><c- p>(</c-><c- n>sch2</c-><c- p>)</c-></code>.</p>
     <li data-md>
      <p>Let <code class="highlight"><c- n>b</c-></code> be an object returned by the <i><code class="highlight"><c- n>backend</c-><c- o>-</c-><c- n>of</c-></code></i><code class="highlight"><c- p>(</c-><c- n>sch</c-><c- p>)</c-></code> expression, let <code class="highlight"><c- n>snd</c-></code> be the object returned by calling <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>schedule</c-><c- p>(</c-><c- n>sch</c-><c- p>)</c-></code>, and let <code class="highlight"><c- n>rcvr</c-></code> be a receiver.
If <code class="highlight"><c- n>rcvr</c-></code> is connected to <code class="highlight"><c- n>snd</c-></code> and the resulting operation state is started, then <code class="highlight"><c- n>b</c-><c- p>.</c-><c- n>schedule</c-><c- p>(</c-><c- n>r</c-><c- p>,</c-> <c- n>s</c-><c- p>)</c-></code> is called, where <code class="highlight"><c- n>r</c-></code> and <code class="highlight"><c- n>s</c-></code> are objects such that:</p>
      <ul>
       <li data-md>
        <p><code class="highlight"><c- n>r</c-></code> is an object of a type derived from <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>receiver</c-></code> such that:</p>
        <ul>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_value</c-><c- p>()</c-></code> is called, then <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>set_value</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>rcvr</c-><c- p>))</c-></code> is called;</p>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_error</c-><c- p>(</c-><c- n>e</c-><c- p>)</c-></code> is called for an expression <code class="highlight"><c- n>e</c-></code>, then <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>set_error</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>rcvr</c-><c- p>),</c-> <c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>e</c-><c- p>))</c-></code> is called;</p>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_stopped</c-><c- p>()</c-></code> is called, then <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>set_stopped</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>rcvr</c-><c- p>))</c-></code> is called.</p>
        </ul>
       <li data-md>
        <p><code class="highlight"><c- n>s</c-></code> is an object of type <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-></code> that points to a possibly empty storage space; if the storage space is not empty it shall be available until one of <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_value</c-><c- p>()</c-></code>, <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_error</c-><c- p>()</c-></code> or <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_stopped</c-><c- p>()</c-></code> is called.</p>
      </ul>
     <li data-md>
      <p>A sender returned from <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>schedule</c-><c- p>(</c-><c- n>sch</c-><c- p>)</c-></code> shall provide a customized implementation of the <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>bulk_chunked</c-><c- p>()</c-></code> algorithm [exec.bulk].
If a receiver <code class="highlight"><c- n>rcvr</c-></code> is connected to the sender returned by the <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>bulk_chunked</c-><c- p>(</c-><c- n>snd</c-><c- p>,</c-> <c- n>pol</c-><c- p>,</c-> <c- n>shape</c-><c- p>,</c-> <c- n>f</c-><c- p>)</c-></code> expression and the resulting operation state is started, then <code class="highlight"><c- n>b</c-><c- p>.</c-><c- n>schedule_bulk_chunked</c-><c- p>(</c-><c- n>shape</c-><c- p>,</c-> <c- n>r</c-><c- p>,</c-> <c- n>s</c-><c- p>)</c-></code> is called, where <code class="highlight"><c- n>r</c-></code> and <code class="highlight"><c- n>s</c-></code> are objects such as:</p>
      <ul>
       <li data-md>
        <p><code class="highlight"><c- n>r</c-></code> is an object of a type derived from <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>bulk_item_receiver</c-></code> such as:</p>
        <ul>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_value</c-><c- p>(</c-><c- n>args</c-><c- p>...)</c-></code> is called, then <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>set_value</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>rcvr</c-><c- p>),</c-> <c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>args</c-><c- p>)...)</c-></code> is called;</p>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_error</c-><c- p>(</c-><c- n>e</c-><c- p>)</c-></code> is called for an expression <code class="highlight"><c- n>e</c-></code>, then <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>set_error</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>rcvr</c-><c- p>),</c-> <c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>e</c-><c- p>))</c-></code> is called;</p>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_stopped</c-><c- p>()</c-></code> is called, then <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>set_stopped</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>rcvr</c-><c- p>))</c-></code> is called.</p>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>execute</c-><c- p>(</c-><c- n>i</c-><c- p>,</c-> <c- n>j</c-><c- p>)</c-></code> is called for indices <code class="highlight"><c- n>i</c-></code> and <code class="highlight"><c- n>j</c-></code>, then <code class="highlight"><c- n>f</c-><c- p>(</c-><c- n>i</c-><c- p>,</c-> <c- n>j</c-><c- p>)</c-></code> is called.</p>
        </ul>
       <li data-md>
        <p><code class="highlight"><c- n>s</c-></code> is an object of type <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-></code> that points to a possibly empty storage space; if the storage space is not empty it shall be available until one of <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_value</c-><c- p>()</c-></code>, <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_error</c-><c- p>()</c-></code> or <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_stopped</c-><c- p>()</c-></code> is called.</p>
       <li data-md>
        <p><span class="enote">Customizing the behavior of <code class="highlight"><c- n>bulk_chunked</c-></code> affects the default implementation of <code class="highlight"><c- n>bulk</c-></code>.</span></p>
      </ul>
     <li data-md>
      <p>A sender returned from <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>schedule</c-><c- p>(</c-><c- n>sch</c-><c- p>)</c-></code> shall provide a customized implementation of the <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>bulk_unchunked</c-><c- p>()</c-></code> algorithm [exec.bulk].
If a receiver <code class="highlight"><c- n>rcvr</c-></code> is connected to the sender returned by the <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>bulk_unchunked</c-><c- p>(</c-><c- n>snd</c-><c- p>,</c-> <c- n>shape</c-><c- p>,</c-> <c- n>f</c-><c- p>)</c-></code> expression and the resulting operation state is started, then <code class="highlight"><c- n>b</c-><c- p>.</c-><c- n>schedule_bulk_unchunked</c-><c- p>(</c-><c- n>shape</c-><c- p>,</c-> <c- n>r</c-><c- p>,</c-> <c- n>s</c-><c- p>)</c-></code> is called, where <code class="highlight"><c- n>r</c-></code> and <code class="highlight"><c- n>s</c-></code> are objects such as:</p>
      <ul>
       <li data-md>
        <p><code class="highlight"><c- n>r</c-></code> is an object of a type derived from <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>bulk_item_receiver</c-></code> such as:</p>
        <ul>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_value</c-><c- p>(</c-><c- n>args</c-><c- p>...)</c-></code> is called, then <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>set_value</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>rcvr</c-><c- p>),</c-> <c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>args</c-><c- p>)...)</c-></code> is called;</p>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_error</c-><c- p>(</c-><c- n>e</c-><c- p>)</c-></code> is called for an expression <code class="highlight"><c- n>e</c-></code>, then <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>set_error</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>rcvr</c-><c- p>),</c-> <c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>e</c-><c- p>))</c-></code> is called;</p>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_stopped</c-><c- p>()</c-></code> is called, then <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>set_stopped</c-><c- p>(</c-><c- n>std</c-><c- o>::</c-><c- n>move</c-><c- p>(</c-><c- n>rcvr</c-><c- p>))</c-></code> is called.</p>
         <li data-md>
          <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>execute</c-><c- p>(</c-><c- n>i</c-><c- p>,</c-> <c- n>i</c-> <c- o>+</c-> <c- mi>1</c-><c- p>)</c-></code> is called for index <code class="highlight"><c- n>i</c-></code>, then <code class="highlight"><c- n>f</c-><c- p>(</c-><c- n>i</c-><c- p>)</c-></code> is called.</p>
        </ul>
       <li data-md>
        <p><code class="highlight"><c- n>s</c-></code> is an object of type <code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-></code> that points to a possibly empty storage space; if the storage space is not empty it shall be available until one of <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_value</c-><c- p>()</c-></code>, <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_error</c-><c- p>()</c-></code> or <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_stopped</c-><c- p>()</c-></code> is called.</p>
      </ul>
    </ol>
    <p><b>33.N Namespace <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>system_context_replaceability</c-></code> [exec.sysctxrepl]</b></p>
    <ol>
     <li data-md>
      <p>Facilities in the <code class="highlight"><c- n>execution</c-><c- o>::</c-><c- n>system_context_replaceability</c-></code> namespace allow users to replace the default implementation of parallel scheduler.</p>
    </ol>
    <p><br> <b>33.N.1 <code class="highlight"><c- n>shared_ptr</c-><c- o>&lt;</c-><c- n>parallel_scheduler_backend</c-><c- o>></c-> <c- n>query_parallel_scheduler_backend</c-><c- p>();</c-></code> [exec.sysctxrepl.query]</b></p>
    <ol>
     <li data-md>
      <p><code class="highlight"><c- n>query_parallel_scheduler_backend</c-><c- p>()</c-></code> returns the implementation object for a parallel scheduler.</p>
     <li data-md>
      <p><em>Returns</em>: a non-null shared pointer to an object that implements the <code class="highlight"><c- n>parallel_scheduler_backend</c-></code> interface.</p>
     <li data-md>
      <p><em>Remarks</em>: This function is replaceable ([dcl.fct.def.replace]).</p>
    </ol>
    <p><b>33.N.2 Class <code class="highlight"><c- n>receiver</c-></code> [exec.sysctxrepl.receiver]</b></p>
    <ol>
     <li data-md>
      <p><code class="highlight"><c- n>receiver</c-></code> represents the type-erased receiver that will be notified by the implementations of <code class="highlight"><c- n>parallel_scheduler_backend</c-></code> to trigger the completion operations. <code class="highlight"><c- n>bulk_item_receiver</c-></code> is inherited from <code class="highlight"><c- n>receiver</c-></code> and is used for <code class="highlight"><c- n>bulk_chunked</c-></code>/<code class="highlight"><c- n>bulk_unchunked</c-></code> customizations that will also receive notifications from implementations of <code class="highlight"><c- n>parallel_scheduler_backend</c-></code> corresponding to different iterations.</p>
      <p><br> <b><code class="highlight"><c- n>std</c-><c- o>::</c-><c- n>optional</c-><c- o>&lt;</c-><c- n>P</c-><c- o>></c-> <c- n>receiver</c-><c- o>::</c-><c- n>try_query</c-><c- p>()</c-> <c- k>noexcept</c-><c- p>;</c-></code></b></p>
     <li data-md>
      <p><em>Returns</em>: an object that contains the property of type <code class="highlight"><c- n>P</c-></code> if the receiver’s environment has such a property, or an empty <code class="highlight"><c- n>optional</c-></code> otherwise.</p>
      <ul>
       <li data-md>
        <p>If the type erased receiver represented by this object has an environment for which <code class="highlight"><c- n>get_stop_token</c-></code> returns an <code class="highlight"><c- n>inplace_stop_token</c-></code> object, then <code class="highlight"><c- n>try_query</c-><c- o>&lt;</c-><c- n>inplace_stop_token</c-><c- o>></c-><c- p>()</c-></code> returns an <code class="highlight"><c- n>optional</c-></code> of a value equal with the stop token from the environment;</p>
       <li data-md>
        <p>It is implementation defined for which other properties <code class="highlight"><c- n>P</c-></code> the method <code class="highlight"><c- n>try_query</c-></code> returns non-empty optional objects.</p>
      </ul>
    </ol>
    <p><br> <b>33.N.3 Class <code class="highlight"><c- n>parallel_scheduler_backend</c-></code> [exec.sysctxrepl.psb]</b></p>
    <ol>
     <li data-md>
      <p><code class="highlight"><c- n>parallel_scheduler_backend</c-></code> encapsulates the implementation details of the parallel scheduler.</p>
      <p><br> <b><code class="highlight"><c- k>virtual</c-> <c- b>void</c-> <c- nf>parallel_scheduler_backend::schedule</c-><c- p>(</c-><c- n>receiver</c-><c- o>&amp;</c-> <c- n>r</c-><c- p>,</c-> <c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-> <c- n>s</c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c-></code></b></p>
     <li data-md>
      <p><em>Effects</em>:</p>
      <ul>
       <li data-md>
        <p>schedules new work on a thread belonging to the execution context represented by <code class="highlight"><c- k>this</c-></code>;</p>
       <li data-md>
        <p>eventually, one of the following methods is called on the given object <code class="highlight"><c- n>r</c-></code>:</p>
        <ul>
         <li data-md>
          <p><code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_value</c-><c- p>()</c-></code>, if no error occurs, and the work is not cancelled;</p>
         <li data-md>
          <p><code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_error</c-><c- p>(</c-><c- n>e</c-><c- p>)</c-></code>, if an error occurs, where <code class="highlight"><c- n>e</c-></code> is an object of the <code class="highlight"><c- n>exception_ptr</c-></code> type representing an error;</p>
         <li data-md>
          <p><code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_stopped</c-><c- p>()</c-></code>, if the work is cancelled.</p>
        </ul>
      </ul>
     <li data-md>
      <p><em>Remarks</em>:</p>
      <ul>
       <li data-md>
        <p>The caller must guarantees that, until one of <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_value</c-><c- p>()</c-></code>, <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_error</c-><c- p>()</c-></code> or <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_stopped</c-><c- p>()</c-></code> is called, the following holds:</p>
        <ul>
         <li data-md>
          <p><code class="highlight"><c- k>this</c-></code> object of the <code class="highlight"><c- n>parallel_scheduler_backend</c-></code> instance is valid;</p>
         <li data-md>
          <p><code class="highlight"><c- n>r</c-></code> and <code class="highlight"><c- n>s</c-></code> are valid;</p>
         <li data-md>
          <p>if <code class="highlight"><c- n>s</c-><c- p>.</c-><c- n>size</c-><c- p>()</c-> <c- o>></c-> <c- mi>0</c-></code> is <code class="highlight">true</code>, the memory pointed by <code class="highlight"><c- n>s</c-><c- p>.</c-><c- n>data</c-><c- p>()</c-></code> is valid.</p>
        </ul>
      </ul>
      <p><br> <b><code class="highlight"><c- k>virtual</c-> <c- b>void</c-> <c- nf>parallel_scheduler_backend::schedule_bulk_chunked</c-><c- p>(</c-><c- b>uint32_t</c-> <c- n>n</c-><c- p>,</c-> <c- n>bulk_item_receiver</c-><c- o>&amp;</c-> <c- n>r</c-><c- p>,</c-> <c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-> <c- n>s</c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c-></code></b></p>
     <li data-md>
      <p><em>Effects</em>: same as for <code class="highlight"><c- n>schedule</c-><c- p>(</c-><c- n>r</c-><c- p>,</c-> <c- n>s</c-><c- p>)</c-></code>, and in addition:</p>
      <ul>
       <li data-md>
        <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>execute</c-><c- p>(</c-><c- n>b</c-><c- p>,</c-> <c- n>e</c-><c- p>)</c-></code> is called, then <code class="highlight"><c- mi>0</c-></code> &lt;= <code class="highlight"><c- n>b</c-></code> &lt; <code class="highlight"><c- n>e</c-></code> &lt;= <code class="highlight"><c- n>n</c-></code>;</p>
       <li data-md>
        <p>all calls to <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>execute</c-><c- p>(</c-><c- n>b</c-><c- p>,</c-> <c- n>e</c-><c- p>)</c-></code> are done with disjoint intervals [<code class="highlight"><c- n>b</c-></code>, <code class="highlight"><c- n>e</c-></code>);</p>
       <li data-md>
        <p>if <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_value</c-><c- p>()</c-></code> is called, then for each <code class="highlight"><c- n>i</c-></code> in [<code class="highlight"><c- mi>0</c-></code>, <code class="highlight"><c- n>n</c-></code>), there is a call to <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>execute</c-><c- p>(</c-><c- n>b</c-><c- p>,</c-> <c- n>e</c-><c- p>)</c-></code> such as <code class="highlight"><c- n>b</c-></code> &lt;= <code class="highlight"><c- n>i</c-></code> &lt; <code class="highlight"><c- n>e</c-></code>;</p>
       <li data-md>
        <p>all calls to <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>execute</c-><c- p>()</c-></code> happen before the call to either <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_value</c-><c- p>()</c-></code>, <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_error</c-><c- p>()</c-></code>, or <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>set_stopped</c-><c- p>()</c-></code>;</p>
       <li data-md>
        <p>all calls to <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>execute</c-><c- p>()</c-></code> need to be made on threads that belong to the execution context represented by <code class="highlight"><c- k>this</c-></code>.</p>
      </ul>
     <li data-md>
      <p><em>Remarks</em>: same as for <code class="highlight"><c- n>schedule</c-><c- p>(</c-><c- n>r</c-><c- p>,</c-> <c- n>s</c-><c- p>)</c-></code>.</p>
      <p><br> <b><code class="highlight"><c- k>virtual</c-> <c- b>void</c-> <c- nf>parallel_scheduler_backend::schedule_bulk_unchunked</c-><c- p>(</c-><c- b>uint32_t</c-> <c- n>n</c-><c- p>,</c-> <c- n>bulk_item_receiver</c-><c- o>&amp;</c-> <c- n>r</c-><c- p>,</c-> <c- n>std</c-><c- o>::</c-><c- n>span</c-><c- o>&lt;</c-><c- n>std</c-><c- o>::</c-><c- n>byte</c-><c- o>></c-> <c- n>s</c-><c- p>)</c-> <c- k>noexcept</c-> <c- o>=</c-> <c- mi>0</c-><c- p>;</c-></code></b></p>
     <li data-md>
      <p><em>Effects</em>: same as for <code class="highlight"><c- n>schedule_bulk_chunked</c-><c- p>(</c-><c- n>n</c-><c- p>,</c-> <c- n>r</c-><c- p>,</c-> <c- n>s</c-><c- p>)</c-></code>, with the difference that for all calls <code class="highlight"><c- n>r</c-><c- p>.</c-><c- n>execute</c-><c- p>(</c-><c- n>b</c-><c- p>,</c-> <c- n>e</c-><c- p>)</c-></code>, <code class="highlight"><c- n>e</c-> <c- o>==</c-> <c- n>b</c-> <c- o>+</c-> <c- mi>1</c-></code>.</p>
     <li data-md>
      <p><em>Remarks</em>: same as for <code class="highlight"><c- n>schedule</c-><c- p>(</c-><c- n>r</c-><c- p>,</c-> <c- n>s</c-><c- p>)</c-></code>.</p>
    </ol>
   </div>
   <h2 class="heading settled" data-level="7" id="polls"><span class="secno">7. </span><span class="content">Polls</span><a class="self-link" href="#polls"></a></h2>
   <h3 class="heading settled" data-level="7.1" id="sg1.poland.2024"><span class="secno">7.1. </span><span class="content">SG1, Wrocław, Poland, 2024</span><a class="self-link" href="#sg1.poland.2024"></a></h3>
   <p>SG1 provided the following feedback, through a poll:</p>
   <ol>
    <li data-md>
     <p>Forward P2079R5 to LEWG for C++26 with changes:</p>
     <ul>
      <li data-md>
       <p>Remove the wording about delegatee schedulers</p>
      <li data-md>
       <p>Add wording about set_error</p>
     </ul>
<pre class="highlight"><c- o>|</c-> <c- n>SF</c-> <c- o>|</c-> <c- n>F</c-> <c- o>|</c-> <c- n>N</c-> <c- o>|</c-> <c- n>A</c-> <c- o>|</c-> <c- n>SA</c-> <c- o>|</c->
<c- o>|</c-> <c- mi>3</c->  <c- o>|</c-> <c- mi>2</c-> <c- o>|</c-> <c- mi>1</c-> <c- o>|</c-> <c- mi>0</c-> <c- o>|</c-> <c- mi>0</c->  <c- o>|</c->
</pre>
     <p>Unanimous consent</p>
   </ol>
   <h3 class="heading settled" data-level="7.2" id="lewg.poland.2024"><span class="secno">7.2. </span><span class="content">LEWG, Wrocław, Poland, 2024</span><a class="self-link" href="#lewg.poland.2024"></a></h3>
   <p>LEWG provided the following feedback, through polls:</p>
   <ol>
    <li data-md>
     <p>POLL: We support mandating (by specifying in the standard) replaceability, as described in: “P2079R5 System execution context”</p>
<pre class="highlight"><c- o>|</c-> <c- n>SF</c-> <c- o>|</c-> <c- n>F</c-> <c- o>|</c-> <c- n>N</c-> <c- o>|</c-> <c- n>A</c-> <c- o>|</c-> <c- n>SA</c-> <c- o>|</c->
<c- o>|</c-> <c- mi>10</c-> <c- o>|</c-> <c- mi>5</c-> <c- o>|</c-> <c- mi>1</c-> <c- o>|</c-> <c- mi>0</c-> <c- o>|</c-> <c- mi>1</c->  <c- o>|</c->
</pre>
     <p>Attendance: 15 IP, 7 online</p>
     <p># of Authors: 2</p>
     <p>Author’s Position: 2x SF</p>
     <p>Outcome: Consensus in favor</p>
     <p>SA: I think using this central point is equivalent to using global and is bad software engineering practice and I wouldn’t like to see it in the standard.</p>
    <li data-md>
     <p>POLL: We support mandating the specific mechanism(s) (link time/runtime/both) of replaceability as described in: “P2079R5 System execution context”</p>
<pre class="highlight"><c- o>|</c-> <c- n>SF</c-> <c- o>|</c-> <c- n>F</c-> <c- o>|</c-> <c- n>N</c-> <c- o>|</c-> <c- n>A</c-> <c- o>|</c-> <c- n>SA</c-> <c- o>|</c->
<c- o>|</c-> <c- mi>5</c->  <c- o>|</c-> <c- mi>6</c-> <c- o>|</c-> <c- mi>3</c-> <c- o>|</c-> <c- mi>0</c-> <c- o>|</c-> <c- mi>2</c->  <c- o>|</c->
</pre>
     <p>Attendance: 15 IP, 7 online</p>
     <p># of Authors: 2</p>
     <p>Author’s Position: 1x SF 1x N</p>
     <p>Outcome: Consensus in favor</p>
     <p>SA: I don’t believe it’s actually possible to describe this in terms of the abstract machine, we’ve never done that.</p>
    <li data-md>
     <p>POLL: We support specifying an API for the replaceability mechanism(s), as described in: “P2079R5 System execution context”</p>
<pre class="highlight"><c- o>|</c-> <c- n>SF</c-> <c- o>|</c-> <c- n>F</c-> <c- o>|</c-> <c- n>N</c-> <c- o>|</c-> <c- n>A</c-> <c- o>|</c-> <c- n>SA</c-> <c- o>|</c->
<c- o>|</c-> <c- mi>7</c->  <c- o>|</c-> <c- mi>6</c-> <c- o>|</c-> <c- mi>2</c-> <c- o>|</c-> <c- mi>0</c-> <c- o>|</c-> <c- mi>1</c->  <c- o>|</c->
</pre>
     <p>Attendance: 15 (IP), 7 (R)</p>
     <p># of Authors: 2</p>
     <p>Author’s Position: 2x SF</p>
     <p>Outcome: Consensus in favor</p>
    <li data-md>
     <p>POLL: For lifetime: “P2079R5 System execution context” (approval poll - allowed to vote multiple times):</p>
     <ol>
      <li data-md>
       <p>Not specified in the standard (valid to use the system scheduler everywhere) | 11 |</p>
      <li data-md>
       <p>Allow lifetime to start before main() (allow use of scheduler before entering main but not after main returns) | 1 |</p>
      <li data-md>
       <p>Constrain lifetime to only be inside of main() | 8 |</p>
     </ol>
     <p>Attendance: 15 (IP), 7 (R)</p>
     <p>Outcome: Slight preference towards 1 ( If authors advocate for 3, they need to add rationale for it)</p>
   </ol>
   <p>In addition to these polls, LEWG provided the following action items:</p>
   <ul>
    <li data-md>
     <p>Add noexcept to move, copy constructor, move/copy assignment operators (special member functions).</p>
    <li data-md>
     <p>Strike system_scheudler query(get_completion_scheduler_t) overload.</p>
    <li data-md>
     <p>Add Lvalue connectability.</p>
    <li data-md>
     <p>Add normative recommendation / non-normative note (if normative - should not be in a note) for sharability in implementations, to be decided later.</p>
   </ul>
   <h3 class="heading settled" data-level="7.3" id="sg1.austria.2025"><span class="secno">7.3. </span><span class="content">SG1, Hagenberg, Austria, 2025</span><a class="self-link" href="#sg1.austria.2025"></a></h3>
   <p>SG1 provided the following feedback, through a forwarding poll:</p>
   <ol start="7">
    <li data-md>
     <p>Forward P2079R6 to LEWG with the following changes towards C++26:</p>
     <p>A. Move the name <code class="highlight"><c- n>get_system_scheduler</c-></code> to a separate paper, we hope with a stronger progress guarantee.</p>
     <p>B. Rename the current <code class="highlight"><c- n>get_system_scheduler</c-></code> to something with "parallel" in the name, like <code class="highlight"><c- n>get_parallel_scheduler</c-></code>, and retain the property that it has the parallel progress guarantee.</p>
     <p>C. Remove run-time replaceability.</p>
<pre class="highlight"><c- n>SF</c-> <c- o>|</c-> <c- n>F</c-> <c- o>|</c-> <c- n>N</c-> <c- o>|</c-> <c- n>A</c-> <c- o>|</c-> <c- n>SA</c->
 <c- mi>5</c-> <c- o>|</c-> <c- mi>5</c-> <c- o>|</c-> <c- mi>0</c-> <c- o>|</c-> <c- mi>1</c-> <c- o>|</c-> <c- mi>0</c->
</pre>
     <p>Consensus</p>
     <p>Against: LB: I’m a bit concerned about some of the lifetime implications of the API changes.  I’d rather see it back in SG1 again before it goes to LEWG.</p>
   </ol>
   <h3 class="heading settled" data-level="7.4" id="lewg.austria.2025"><span class="secno">7.4. </span><span class="content">LEWG, Hagenberg, Austria, 2025</span><a class="self-link" href="#lewg.austria.2025"></a></h3>
   <p>POLL: in P2079R7: rename <code class="highlight"><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>parallel_scheduler</c-></code> to <code class="highlight"><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>parallel_scheduler_backend</c-></code></p>
   <p>Outcome: No objection to UC (in favor)</p>
   <p>POLL: in P2079R7: rename <code class="highlight"><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>bulk_item_receiver</c-><c- o>::</c-><c- n>start</c-><c- p>(...)</c-></code> to <code class="highlight"><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>bulk_item_receiver</c-><c- o>::</c-><c- n>execute</c-><c- p>(...)</c-></code></p>
   <p>Outcome: No objection to UC (in favor)</p>
   <p>POLL: in P2079R7: replace <code class="highlight"><c- n>system_context_replaceability</c-><c- o>::</c-><c- n>storage</c-></code> with a <code class="highlight"><c- n>span</c-></code></p>
<pre class="highlight"><c- n>SF</c-> <c- o>|</c-> <c- n>F</c-> <c- o>|</c-> <c- n>N</c-> <c- o>|</c-> <c- n>A</c-> <c- o>|</c-> <c- n>SA</c->
 <c- mi>8</c-> <c- o>|</c-> <c- mi>3</c-> <c- o>|</c-> <c- mi>3</c-> <c- o>|</c-> <c- mi>0</c-> <c- o>|</c-> <c- mi>0</c->
</pre>
   <p>Attendance: 21 (IP) + 2 (R)</p>
   <p>Author’s Position: 2xN, WF</p>
   <p>Outcome: Strong consensus in favour</p>
   <p>POLL: Make the modifications above (rename, turn pointers into refs, replace storage with span) and forward P2079R7 to LWG for C++26.</p>
<pre class="highlight"><c- n>SF</c-> <c- o>|</c-> <c- n>F</c-> <c- o>|</c-> <c- n>N</c-> <c- o>|</c-> <c- n>A</c-> <c- o>|</c-> <c- n>SA</c->
 <c- mi>6</c-> <c- o>|</c-> <c- mi>5</c-> <c- o>|</c-> <c- mi>2</c-> <c- o>|</c-> <c- mi>1</c-> <c- o>|</c-> <c- mi>1</c->
</pre>
   <p>Attendance: 21 (IP) + 2 (R)</p>
   <p>Author’s Position: SF, F, N</p>
   <p>Outcome: Consensus in favour</p>
  </main>
<script>
(function() {
  "use strict";
  var collapseSidebarText = '<span aria-hidden="true">←</span> '
                          + '<span>Collapse Sidebar</span>';
  var expandSidebarText   = '<span aria-hidden="true">→</span> '
                          + '<span>Pop Out Sidebar</span>';
  var tocJumpText         = '<span aria-hidden="true">↑</span> '
                          + '<span>Jump to Table of Contents</span>';

  var sidebarMedia = window.matchMedia('screen and (min-width: 78em)');
  var autoToggle   = function(e){ toggleSidebar(e.matches) };
  if(sidebarMedia.addListener) {
    sidebarMedia.addListener(autoToggle);
  }

  function toggleSidebar(on) {
    if (on == undefined) {
      on = !document.body.classList.contains('toc-sidebar');
    }

    /* Don't scroll to compensate for the ToC if we're above it already. */
    var headY = 0;
    var head = document.querySelector('.head');
    if (head) {
      // terrible approx of "top of ToC"
      headY += head.offsetTop + head.offsetHeight;
    }
    var skipScroll = window.scrollY < headY;

    var toggle = document.getElementById('toc-toggle');
    var tocNav = document.getElementById('toc');
    if (on) {
      var tocHeight = tocNav.offsetHeight;
      document.body.classList.add('toc-sidebar');
      document.body.classList.remove('toc-inline');
      toggle.innerHTML = collapseSidebarText;
      if (!skipScroll) {
        window.scrollBy(0, 0 - tocHeight);
      }
      tocNav.focus();
      sidebarMedia.addListener(autoToggle); // auto-collapse when out of room
    }
    else {
      document.body.classList.add('toc-inline');
      document.body.classList.remove('toc-sidebar');
      toggle.innerHTML = expandSidebarText;
      if (!skipScroll) {
        window.scrollBy(0, tocNav.offsetHeight);
      }
      if (toggle.matches(':hover')) {
        /* Unfocus button when not using keyboard navigation,
           because I don't know where else to send the focus. */
        toggle.blur();
      }
    }
  }

  function createSidebarToggle() {
    /* Create the sidebar toggle in JS; it shouldn't exist when JS is off. */
    var toggle = document.createElement('a');
      /* This should probably be a button, but appearance isn't standards-track.*/
    toggle.id = 'toc-toggle';
    toggle.class = 'toc-toggle';
    toggle.href = '#toc';
    toggle.innerHTML = collapseSidebarText;

    sidebarMedia.addListener(autoToggle);
    var toggler = function(e) {
      e.preventDefault();
      sidebarMedia.removeListener(autoToggle); // persist explicit off states
      toggleSidebar();
      return false;
    }
    toggle.addEventListener('click', toggler, false);


    /* Get <nav id=toc-nav>, or make it if we don't have one. */
    var tocNav = document.getElementById('toc-nav');
    if (!tocNav) {
      tocNav = document.createElement('p');
      tocNav.id = 'toc-nav';
      /* Prepend for better keyboard navigation */
      document.body.insertBefore(tocNav, document.body.firstChild);
    }
    /* While we're at it, make sure we have a Jump to Toc link. */
    var tocJump = document.getElementById('toc-jump');
    if (!tocJump) {
      tocJump = document.createElement('a');
      tocJump.id = 'toc-jump';
      tocJump.href = '#toc';
      tocJump.innerHTML = tocJumpText;
      tocNav.appendChild(tocJump);
    }

    tocNav.appendChild(toggle);
  }

  var toc = document.getElementById('toc');
  if (toc) {
    createSidebarToggle();
    toggleSidebar(sidebarMedia.matches);

    /* If the sidebar has been manually opened and is currently overlaying the text
       (window too small for the MQ to add the margin to body),
       then auto-close the sidebar once you click on something in there. */
    toc.addEventListener('click', function(e) {
      if(e.target.tagName.toLowerCase() == "a" && document.body.classList.contains('toc-sidebar') && !sidebarMedia.matches) {
        toggleSidebar(false);
      }
    }, false);
  }
  else {
    console.warn("Can't find Table of Contents. Please use <nav id='toc'> around the ToC.");
  }

  /* Wrap tables in case they overflow */
  var tables = document.querySelectorAll(':not(.overlarge) > table.data, :not(.overlarge) > table.index');
  var numTables = tables.length;
  for (var i = 0; i < numTables; i++) {
    var table = tables[i];
    var wrapper = document.createElement('div');
    wrapper.className = 'overlarge';
    table.parentNode.insertBefore(wrapper, table);
    wrapper.appendChild(table);
  }

})();
</script>
  <h2 class="no-num no-ref heading settled" id="references"><span class="content">References</span><a class="self-link" href="#references"></a></h2>
  <h3 class="no-num no-ref heading settled" id="informative"><span class="content">Informative References</span><a class="self-link" href="#informative"></a></h3>
  <dl>
   <dt id="biblio-exec">[EXEC]
   <dd>ISO WG21. <a href="https://eel.is/c++draft/exec"><cite>Working Draft: Programming Languages — C++ -- Execution control library</cite></a>. URL: <a href="https://eel.is/c++draft/exec">https://eel.is/c++draft/exec</a>
   <dt id="biblio-p0443r14">[P0443R14]
   <dd>Jared Hoberock, Michael Garland, Chris Kohlhoff, Chris Mysen, H. Carter Edwards, Gordon Brown, D. S. Hollman. <a href="https://wg21.link/p0443r14"><cite>A Unified Executors Proposal for C++</cite></a>. 15 September 2020. URL: <a href="https://wg21.link/p0443r14">https://wg21.link/p0443r14</a>
   <dt id="biblio-p2079r1">[P2079R1]
   <dd>Ruslan Arutyunyan, Michael Voss. <a href="https://wg21.link/p2079r1"><cite>Parallel Executor</cite></a>. 15 August 2020. URL: <a href="https://wg21.link/p2079r1">https://wg21.link/p2079r1</a>
   <dt id="biblio-p2079r2">[P2079R2]
   <dd>Lee Howes, Ruslan Arutyunyan, Michael Voss. <a href="https://wg21.link/p2079r2"><cite>System execution context</cite></a>. 15 January 2022. URL: <a href="https://wg21.link/p2079r2">https://wg21.link/p2079r2</a>
   <dt id="biblio-p2300r10">[P2300R10]
   <dd>Eric Niebler, Michał Dominiak, Georgy Evtushenko, Lewis Baker, Lucian Radu Teodorescu, Lee Howes, Kirk Shoop, Michael Garland, Bryce Adelstein Lelbach. <a href="https://wg21.link/p2300r10"><cite>`std::execution`</cite></a>. 28 June 2024. URL: <a href="https://wg21.link/p2300r10">https://wg21.link/p2300r10</a>
   <dt id="biblio-p2900r8">[P2900R8]
   <dd>Joshua Berne, Timur Doumler, Andrzej Krzemieński. <a href="https://wg21.link/p2900r8"><cite>Contracts for C++</cite></a>. 27 July 2024. URL: <a href="https://wg21.link/p2900r8">https://wg21.link/p2900r8</a>
   <dt id="biblio-p3109r0">[P3109R0]
   <dd>Lewis Baker, Eric Niebler, Kirk Shoop, Lucian Radu. <a href="https://wg21.link/p3109r0"><cite>A plan for std::execution for C++26</cite></a>. 12 February 2024. URL: <a href="https://wg21.link/p3109r0">https://wg21.link/p3109r0</a>
   <dt id="biblio-p3481r1">[P3481R1]
   <dd>Lucian Radu Teodorescu; Lewis Baker; Ruslan Arutyunyan. <a href="https://wg21.link/P3481R1"><cite>std::execution::bulk() issues</cite></a>. URL: <a href="https://wg21.link/P3481R1">https://wg21.link/P3481R1</a>
  </dl>