<!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>P2195R2: Electronic Straw Polls</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,
	#subtitle {
		/* #subtitle 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: none;
		border-bottom: 1px solid #707070;
		border-bottom: 1px solid var(--a-normal-underline);
		/* Need a bit of extending for it to look okay */
		padding: 0 1px 0;
		margin: 0 -1px 0;
	}
	a:visited {
		color: #034575;
		color: var(--a-visited-text);
		border-bottom-color: #bbb;
		border-bottom-color: var(--a-visited-underline);
	}

	/* Use distinguishing colors when user is interacting with the link */
	a[href]:focus,
	a[href]:hover {
		background: #f8f8f8;
		background: rgba(75%, 75%, 75%, .25);
		background: var(--a-hover-bg);
		border-bottom-width: 3px;
		margin-bottom: -2px;
	}
	a[href]:active {
		color: #c00;
		color: var(--a-active-text);
		border-color: #c00;
		border-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-top: 0.1rem;
		/* Larger, more consistently-sized click target */
		display: block;
		/* 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: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;
		}
		#toc .content:hover,
		#toc .content:focus {
			background: rgba(75%, 75%, 75%, .25);
			background: var(--a-hover-bg);
			border-bottom: 3px solid #054572;
			border-bottom: 3px solid var(--toclink-underline);
			margin-bottom: -3px;
		}
		#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 span:not(.dfn-paneled) {
			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 type="text/css">
    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 4e8dd937, updated Fri Nov 13 16:49:31 2020 -0800" name="generator">
  <link href="https://wg21.link/P2195R2" rel="canonical">
  <link href="https://isocpp.org/favicon.ico" rel="icon">
<style>
pre {
  margin-top: 0px;
  margin-bottom: 0px;
}
.ins, ins, ins *, span.ins, span.ins * {
  background-color: rgb(200, 250, 200);
  color: rgb(0, 136, 0);
  text-decoration: none;
}
.del, del, del *, span.del, span.del * {
  background-color: rgb(250, 200, 200);
  color: rgb(255, 0, 0);
  text-decoration: line-through;
  text-decoration-color: rgb(255, 0, 0);
}
math, span.math {
  font-family: serif;
  font-style: italic;
}
ul {
  list-style-type: "— ";
}
blockquote {
  counter-reset: paragraph;
}
div.numbered, div.newnumbered {
  margin-left: 2em;
  margin-top: 1em;
  margin-bottom: 1em;
}
div.numbered:before, div.newnumbered:before {
  position: absolute;
  margin-left: -2em;
  display-style: block;
}
div.numbered:before {
  content: counter(paragraph);
  counter-increment: paragraph;
}
div.newnumbered:before {
  content: "�";
}
div.numbered ul, div.newnumbered ul {
  counter-reset: list_item;
}
div.numbered li, div.newnumbered li {
  margin-left: 3em;
}
div.numbered li:before, div.newnumbered li:before {
  position: absolute;
  margin-left: -4.8em;
  display-style: block;
}
div.numbered li:before {
  content: "(" counter(paragraph) "." counter(list_item) ")";
  counter-increment: list_item;
}
div.newnumbered li:before {
  content: "(�." counter(list_item) ")";
  counter-increment: list_item;
}
</style>
<style>
  .telecon { font-size:0.5em; }
  .choo-choo { width: 95%; padding: 1em 2.5% 1em 2.5%; height: 11em; }
</style>
<style>
  .polls { width: 100% }
  .polls td { border: 1px solid black; padding: 0.5em; text-align: center }
</style>
<style>/* 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;
}</style>
<style>/* 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: #707070;
    --a-visited-text: var(--a-normal-text);
    --a-visited-underline: #bbb;
    --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;
}</style>
<style>/* 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>/* style-dfn-panel */

:root {
    --dfnpanel-bg: #ddd;
    --dfnpanel-text: var(--text);
}
.dfn-panel {
    position: absolute;
    z-index: 35;
    height: auto;
    width: -webkit-fit-content;
    width: fit-content;
    max-width: 300px;
    max-height: 500px;
    overflow: auto;
    padding: 0.5em 0.75em;
    font: small Helvetica Neue, sans-serif, Droid Sans Fallback;
    background: var(--dfnpanel-bg);
    color: var(--dfnpanel-text);
    border: outset 0.2em;
}
.dfn-panel:not(.on) { display: none; }
.dfn-panel * { margin: 0; padding: 0; text-indent: 0; }
.dfn-panel > b { display: block; }
.dfn-panel a { color: var(--dfnpanel-text); }
.dfn-panel a:not(:hover) { text-decoration: none !important; border-bottom: none !important; }
.dfn-panel > b + b { margin-top: 0.25em; }
.dfn-panel ul { padding: 0; }
.dfn-panel li { list-style: inside; }
.dfn-panel.activated {
    display: inline-block;
    position: fixed;
    left: .5em;
    bottom: 2em;
    margin: 0 auto;
    max-width: calc(100vw - 1.5em - .4em - .5em);
    max-height: 30vh;
}

.dfn-paneled { cursor: pointer; }
</style>
<style>/* 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>/* 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%;
}
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>/* style-darkmode */

@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; }
}
@media (prefers-color-scheme: dark) {
    :root {
        --selflink-text: black;
        --selflink-bg: silver;
        --selflink-hover-text: white;
    }
}
</style>
 <body class="h-entry">
  <div class="head">
   <p data-fill-with="logo"></p>
   <h1 class="p-name no-ref" id="title">P2195R2<br>Electronic Straw Polls</h1>
   <h2 class="no-num no-toc no-ref heading settled" id="subtitle"><span class="content">Published Proposal, <time class="dt-updated" datetime="2021-01-28">2021-01-28</time></span></h2>
   <div data-fill-with="spec-metadata">
    <dl>
     <dt class="editor">Authors:
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:brycelelbach@gmail.com">Bryce Adelstein Lelbach (he/him/his) — Library Evolution Chair</a> (<span class="p-org org">NVIDIA</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:cxx@jfbastien.com">JF Bastien — Evolution Chair and Canadian National Body</a> (<span class="p-org org">Apple</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:hfinkel@anl.gov">Hal Finkel — Administrative Chair &amp; US National Body Vice Chair</a> (<span class="p-org org">Argonne National Laboratory</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:f.fracassi@gmx.net">Fabio Fracassi — Library Evolution Vice Chair</a> (<span class="p-org org">CODE University of Applied Sciences</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:ben.craig@gmail.com">Ben Craig — Library Evolution Vice Chair</a> (<span class="p-org org">NI</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:Billy.Baker@flightsafety.com">Billy Baker — Library Evolution Incubator Chair</a> (<span class="p-org org">FlightSafety</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:nliber@gmail.com">Nevin Liber — Library Evolution Incubator Vice Chair</a> (<span class="p-org org">Argonne National Laboratory</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:titus@google.com">Titus Winters — Library Evolution Chair Emeritus</a> (<span class="p-org org">Google</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:jyasskin@gmail.com">Jeffrey Yasskin — Library Evolution Chair Emeritus</a> (<span class="p-org org">Google</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:ville.voutilainen@gmail.com">Ville Voutilainen — Evolution Chair Emeritus and Finnish National Body</a> (<span class="p-org org">The Qt Company</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:tom@honermann.net">Tom Honermann — SG16 Unicode and Text Processing (SG16) Chair</a> (<span class="p-org org">Synopsys</span>)
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:sinbal2l@gmail.com">Inbal Levi — Israeli National Body Chair</a>
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:antoshkka@gmail.com">Antony Polukhin — Russian National Body</a>
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:corentin.jabot@gmail.com">Corentin Jabot — French National Body</a>
     <dd class="editor p-author h-card vcard"><a class="p-name fn u-email email" href="mailto:david@doublewise.net">David Stone — Evolution Working Group Vice Chair</a> (<span class="p-org org">Modules Study Group Chair</span>)
     <dt>Source:
     <dd><a href="https://github.com/brycelelbach/wg21_p2195_electronic_straw_polls/blob/main/electronic_straw_polls.bs">GitHub</a>
     <dt>Issue Tracking:
     <dd><a href="https://github.com/brycelelbach/wg21_p2195_electronic_straw_polls/issues">GitHub</a>
     <dt>Project:
     <dd>ISO/IEC JTC1/SC22/WG21 14882: Programming Language — C++
     <dt>Audience:
     <dd>WG21
    </dl>
   </div>
   <div data-fill-with="warning"></div>
   <hr title="Separator for header">
  </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="#introduction"><span class="secno">1</span> <span class="content">Introduction</span></a>
     <ol class="toc">
      <li><a href="#summary"><span class="secno">1.1</span> <span class="content">Summary</span></a>
      <li><a href="#related-work"><span class="secno">1.2</span> <span class="content">Related Work</span></a>
      <li><a href="#scope"><span class="secno">1.3</span> <span class="content">Scope</span></a>
      <li><a href="#prior-art"><span class="secno">1.4</span> <span class="content">Prior Art</span></a>
      <li><a href="#consensus-building-mechanisms"><span class="secno">1.5</span> <span class="content">Consensus Building Mechanisms</span></a>
      <li><a href="#consensus-determining-mechanisms"><span class="secno">1.6</span> <span class="content">Consensus Determining Mechanisms</span></a>
     </ol>
    <li><a href="#proposed-changes"><span class="secno">2</span> <span class="content">Proposed Changes</span></a>
    <li>
     <a href="#electronic-straw-poll-specification"><span class="secno">3</span> <span class="content">Electronic Straw Poll Specification</span></a>
     <ol class="toc">
      <li><a href="#poll-structure"><span class="secno">3.1</span> <span class="content">Poll Structure</span></a>
      <li><a href="#eligibility-for-voting"><span class="secno">3.2</span> <span class="content">Eligibility for Voting</span></a>
      <li>
       <a href="#voting"><span class="secno">3.3</span> <span class="content">Voting</span></a>
       <ol class="toc">
        <li><a href="#voting-email-specific"><span class="secno">3.3.1</span> <span class="content">Voting (Email Specific)</span></a>
        <li><a href="#voting-service-specific"><span class="secno">3.3.2</span> <span class="content">Voting (Service Specific)</span></a>
       </ol>
      <li><a href="#creation-of-polls"><span class="secno">3.4</span> <span class="content">Creation of Polls</span></a>
      <li><a href="#withdrawal-of-polls"><span class="secno">3.5</span> <span class="content">Withdrawal of Polls</span></a>
      <li><a href="#modification-of-polls"><span class="secno">3.6</span> <span class="content">Modification of Polls</span></a>
      <li><a href="#discussion-prior-to-polling"><span class="secno">3.7</span> <span class="content">Discussion Prior to Polling</span></a>
      <li><a href="#poll-notifications"><span class="secno">3.8</span> <span class="content">Poll Notifications</span></a>
      <li><a href="#poll-duration"><span class="secno">3.9</span> <span class="content">Poll Duration</span></a>
      <li><a href="#poll-results"><span class="secno">3.10</span> <span class="content">Poll Results</span></a>
     </ol>
    <li><a href="#faq"><span class="secno">4</span> <span class="content">FAQ</span></a>
    <li>
     <a href="#index"><span class="secno"></span> <span class="content">Index</span></a>
     <ol class="toc">
      <li><a href="#index-defined-here"><span class="secno"></span> <span class="content">Terms defined by this specification</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="introduction"><span class="secno">1. </span><span class="content">Introduction</span><a class="self-link" href="#introduction"></a></h2>
   <p>The Standard C++ Committee is starting to conduct more and more of our
  technical work in a virtual environment (see <a data-link-type="biblio" href="#biblio-p2145r0">[P2145R0]</a>), in part due to
  the current global pandemic.
This switch to remote work has required us to make changes to how we meet and
  collaborate.</p>
   <p>To have effective virtual meetings, we need to evolve our consensus building
  process, because it has traditionally been face-to-face only.
We will not meet face-to-face again until it is possible to do so without
  putting peoples' lives at risk, and we do not know when that will be.</p>
   <p>We therefore propose that the Evolution and Library Evolution chairs be able to
  conduct <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls">straw polls</a> asynchronously through either email or an electronic
  polling service run by the Standard C++ Foundation.</p>
   <h3 class="heading settled" data-level="1.1" id="summary"><span class="secno">1.1. </span><span class="content">Summary</span><a class="self-link" href="#summary"></a></h3>
   <p>We propose:</p>
   <ul>
    <li data-md>
     <p>Continuing virtual teleconferences, which hone design and provide
non-binding design direction.</p>
    <li data-md>
     <p>Begin holding quarterly asynchronous electronic polls for evolution groups
either via email or an electronic polling service run by the Standard C++
Foundation.</p>
    <li data-md>
     <p>Separate polls into two categories: <a data-link-type="dfn" href="#direction-straw-polls" id="ref-for-direction-straw-polls">Direction Straw Polls</a> and <a data-link-type="dfn" href="#decision-straw-polls" id="ref-for-decision-straw-polls">Decision Straw Polls</a>.</p>
    <li data-md>
     <p>Anything that is judged ready for a binding decision poll is put on the
next applicable quarterly poll.</p>
    <li data-md>
     <p>Polls can be added to the quarterly list up to a month before the quarterly
poll is closed.</p>
    <li data-md>
     <p>A teleconference is held one week before polls close to hold technical
discussions which haven’t been addressed over email or at prior
teleconferences.</p>
    <li data-md>
     <p>The impact and effectiveness of all the above should be monitored and
changes should be proposed to improve the process as needed.</p>
   </ul>
   <p>In a way, this is a mini-train model embedded into C++'s larger 3-year release
  train schedule:</p>
   <ul>
    <li data-md>
     <p>Releases every three years (status quo).</p>
    <li data-md>
     <p>Evolution groups decision polls every quarter.</p>
    <li data-md>
     <p>Mailings every month (status quo).</p>
    <li data-md>
     <p>Teleconferences every week.</p>
   </ul>
   <svg class="choo-choo">
    <rect fill="white" height="2em" stroke="red" width="100%" x="00%" y="0em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="50%" y="1em">🚂 C++Next</text>
    <rect fill="white" height="2em" stroke="blue" width="25%" x="00%" y="3em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="12.5%" y="4em">🚄 ¼</text>
    <rect fill="white" height="2em" stroke="blue" width="25%" x="25%" y="3em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="37.5%" y="4em">🚄 ¼</text>
    <rect fill="white" height="2em" stroke="blue" width="25%" x="50%" y="3em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="62.5%" y="4em">🚄 ¼</text>
    <rect fill="white" height="2em" stroke="blue" width="25%" x="75%" y="3em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="87.5%" y="4em">🚄 ¼</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="00.000%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="04.167%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="08.333%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="12.500%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="16.667%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="20.833%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="25.000%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="29.167%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="33.333%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="37.500%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="41.667%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="45.833%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="50.000%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="54.167%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="58.333%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="62.500%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="66.667%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="70.833%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="75.000%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="79.167%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="83.333%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="87.500%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="green" width="08.333%" x="91.667%" y="6em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="95.833%" y="7em">📧️</text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="00.000%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="00.962%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="01.923%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="02.885%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="03.846%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="04.808%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="05.769%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="06.731%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="07.692%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="08.654%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="09.615%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="10.577%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="11.538%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="12.500%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="13.462%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="14.423%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="15.385%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="16.346%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="17.308%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="18.269%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="19.231%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="20.192%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="21.154%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="22.115%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="23.077%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="24.038%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="25.000%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="25.962%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="26.923%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="27.885%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="28.846%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="29.808%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="30.769%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="31.731%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="32.692%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="33.654%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="34.615%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="35.577%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="36.538%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="37.500%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="38.462%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="39.423%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="40.385%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="41.346%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="42.308%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="43.269%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="44.231%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="45.192%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="46.154%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="47.115%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="48.077%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="49.038%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="50.000%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="50.962%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="51.923%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="52.885%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="53.846%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="54.808%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="55.769%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="56.731%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="57.692%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="58.654%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="59.615%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="60.577%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="61.538%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="62.500%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="63.462%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="64.423%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="65.385%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="66.346%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="67.308%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="68.269%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="69.231%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="70.192%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="71.154%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="72.115%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="73.077%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="74.038%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="75.000%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="75.962%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="76.923%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="77.885%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="78.846%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="79.808%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="80.769%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="81.731%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="82.692%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="83.654%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="84.615%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="85.577%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="86.538%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="87.500%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="88.462%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="89.423%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="90.385%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="91.346%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="92.308%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="93.269%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="94.231%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="95.192%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="96.154%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="97.115%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
    <rect fill="white" height="2em" stroke="black" width="1.923%" x="98.077%" y="9em"></rect>
    <text dominant-baseline="middle" text-anchor="middle" x="99.038%" y="10em">
     <tspan class="telecon">📞</tspan>
    </text>
   </svg>
   <h3 class="heading settled" data-level="1.2" id="related-work"><span class="secno">1.2. </span><span class="content">Related Work</span><a class="self-link" href="#related-work"></a></h3>
   <p>The following proposals address topics related to this proposal:</p>
   <ul>
    <li data-md>
     <p><a data-link-type="biblio" href="#biblio-p0592r4">[P0592R4]</a> establishes our priorities for C++ evolution.</p>
    <li data-md>
     <p><a data-link-type="biblio" href="#biblio-p2138r2">[P2138R2]</a> explains how proposals should move through the committee.</p>
    <li data-md>
     <p><a data-link-type="biblio" href="#biblio-p2145r1">[P2145R1]</a> describes processes and procedures for remote meetings.</p>
   </ul>
   <h3 class="heading settled" data-level="1.3" id="scope"><span class="secno">1.3. </span><span class="content">Scope</span><a class="self-link" href="#scope"></a></h3>
   <p>We focus on the evolution groups because, so far, study groups and
  the core groups have been able to advance work without too many issues.
In large parts, this is because study groups are focused interest groups who
  forward to evolutions groups.
Similarly, core groups are smaller and have more focus, and controversial design
  discussions tend to occur prior to reaching the core groups.</p>
   <h3 class="heading settled" data-level="1.4" id="prior-art"><span class="secno">1.4. </span><span class="content">Prior Art</span><a class="self-link" href="#prior-art"></a></h3>
   <p>Historically, consensus building within the Standard C++ Committee has been
  synchronous and has occured at face-to-face meetings:</p>
   <ul>
    <li data-md>
     <p><dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport id="straw-polls">Straw Polls</dfn>: Evolution groups and study groups have used informal polls
  during face-to-face meetings to decide whether to pursue proposals,
  provide directions for future revisions of proposals, make policy
  decisions, and forward proposals to other groups or plenaries.
Anyone physically in attendance when a <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls①">straw poll</a> is taken is allowed to
  participate, including those who are visitors and do not yet have formal
  membership in a National Body.
Typically, chairs discourage those who were not present for the discussion
  preceding the poll from voting, but they are not disallowed from doing so.
Decisions made in this way are not strictly binding; if new information or
  new perspectives are discovered, decisions can always be revisited.</p>
    <li data-md>
     <p><dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport id="plenary-polls">Plenary Polls</dfn>: More formal polls are taken during plenaries at
  face-to-face meetings.
Only formal Committee members may participate in plenary polls.
Plenary polls are used to approve changes to the working draft of the C++
  International Standard or a C++ Technical Specification, create or advance
  work items to the next stage in their publication cycle, and make
  Committee-wide policy decisions.
In the past few years, we have avoided technical discussion on the subject
  matter of a plenary poll during the plenary itself; technical discussion
  is supposed to happen in the applicable study groups prior to plenary.</p>
   </ul>
   <p>Some of the decisions made at plenary meetings, such as the creation and
  advancement of work items through their publication cycle, lead to
  asynchronous electronic polls at the ISO level which then trickle down to
  our National Bodies, each of which uses their own consensus building process.
Typically these ISO polls are open for a few weeks or months, giving ample time
  for stakeholders to consider the subject matter and make up their mind.</p>
   <p>The parent organization of the US National Body, INCITS, <a data-link-type="dfn" href="#asynchronous-consensus-building" id="ref-for-asynchronous-consensus-building">builds consensus asynchronously</a> through
  electronic polls or calls for comments which are open for a few weeks or
  months.</p>
   <p>Another ISO programming language committee, the Standard Fortran Committee,
  makes synchronous decisions at face-to-face meetings.
However, many of these decisions are considered preliminary and are followed up
  with an electronic polls within the Committee to determine consensus.
The below excerpt describes their process for one particular type of poll:</p>
   <blockquote>
    <p>The rules for interpretation handling by which we operate say:</p>
    <ul>
     <li data-md>
      <p>J3 votes on the answer at a J3 meeting; a simple majority vote marks the
answer as "passed by J3 meeting".</p>
     <li data-md>
      <p>Between J3 meetings the chair of /interp sends a J3 letter ballot to J3 to
  approve interp answers that have been "passed by J3 meeting".
The letter ballot runs for 30 days.
An interp answer passes by a 2/3rds vote; a no vote must be accompanied by
  an explanation of the changes necessary to change the member’s vote to
  yes.
J3/interp reserves the right to recall an interp answer for more study
  even if the answer passes.</p>
    </ul>
   </blockquote>
   <h3 class="heading settled" data-level="1.5" id="consensus-building-mechanisms"><span class="secno">1.5. </span><span class="content">Consensus Building Mechanisms</span><a class="self-link" href="#consensus-building-mechanisms"></a></h3>
   <p>Our consensus building is <a href="https://isocpp.org/std/standing-documents/sd-4-wg21-practices-and-procedures#consensus">defined in SD-4</a>.</p>
   <p><dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport id="synchronous-consensus-building">Synchronous Consensus Building</dfn> is a process for building consensus
  in which those involved meet at an appointed time (face-to-face or via
  telecon), discuss the subject matter, and then work to reach a consensus
  position before the end of the meeting.</p>
   <p><dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport id="asynchronous-consensus-building">Asynchronous Consensus Building</dfn> is a process for building consensus
  in which a deadline is set, those involved discuss the subject matter (email,
  face-to-face, and/or telecon), and then work to reach a consensus decision
  before the deadline.</p>
   <p>One of the main motivations for <a data-link-type="dfn" href="#synchronous-consensus-building" id="ref-for-synchronous-consensus-building">synchronous consensus building</a> is that
  it attempts to ensure that those voting on a poll are informed on the subject
  matter, as they were present for the discussion of it.
However, despite our best efforts, we cannot force participants to be engaged
  and follow the discussion, even if they are present.</p>
   <p>There are a number of downsides to <a data-link-type="dfn" href="#synchronous-consensus-building" id="ref-for-synchronous-consensus-building①">synchronous consensus building</a>:</p>
   <ul>
    <li data-md>
     <p>It limits stakeholder involvement to those who can present at the meeting.
For face-to-face meeting, this requires participants to travel to the
  meeting location.
For telecons, it is almost impossible to avoid excluding some stakeholders
  due to time zone constraints.</p>
    <li data-md>
     <p>It often forces stakeholders present at meetings to choose which decisions
  they wish to be involved with.
At the last few face-to-face meetings, we have had seven concurrent
  group meetings for most of the week; it is almost impossible to avoid
  conflicts.
For telecons, it is almost impossible to avoid excluding some stakeholders
  due to schedule constraints.</p>
    <li data-md>
     <p>It limits the amount of discussion that can proceed making a decision.
Synchronous meeting time is a precious and limited resource.</p>
    <li data-md>
     <p>It does not leave time for reflection and reconsideration. <a data-link-type="dfn" href="#synchronous-consensus-building" id="ref-for-synchronous-consensus-building②">Synchronous consensus building</a> asks us to make a decision immediately
  after a discussion.
While we can almost always reconsider decisions in light of new information
  or new perspectives, it is often wise to give stakeholders more time than
  a synchronous meeting can last to think about the decision and
  investigate open questions they may have.</p>
   </ul>
   <p><a data-link-type="dfn" href="#asynchronous-consensus-building" id="ref-for-asynchronous-consensus-building①">Asynchronous consensus building</a> addresses many of these shortcomings.
It allows more stakeholders to be involved in consensus building, equalizing
  the field by removing barriers to participation.
It removes the pressure and hastiness of trying to determine consensus before
  the end of a meeting, giving stakeholders more time to contemplate and decide
  their position.
This ensures that all opinions are ensured equally in the consensus building
  process, resulting in a better standard.</p>
   <p>However, <a data-link-type="dfn" href="#asynchronous-consensus-building" id="ref-for-asynchronous-consensus-building②">asynchronous consensus building</a> does have downsides as well:</p>
   <ul>
    <li data-md>
     <p>It may make it easier to participate in making a decision without
participating in the discussion or knowledge of the subject matter.</p>
    <li data-md>
     <p>Discussion and decision making are not temporally tightly coupled, which may
make it harder for participants to remain informed on the subject matter at
the time of the poll.</p>
    <li data-md>
     <p>The lead time for making decisions is greater, which means it is harder to
revisit decisions or make additional decisions based on earlier results.</p>
   </ul>
   <p>We recognize that these may be issues, but we’ve taken steps to mitigate them and
  we believe the upsides outweigh the downsides.
It is important to note that we make decisions by consensus, not majority vote.</p>
   <p>Ultimately, there is a trade-off between <a data-link-type="dfn" href="#synchronous-consensus-building" id="ref-for-synchronous-consensus-building③">synchronous consensus building</a> and <a data-link-type="dfn" href="#asynchronous-consensus-building" id="ref-for-asynchronous-consensus-building③">asynchronous consensus building</a>; we believe that using a combination of
  both mechanisms is the right choice for C++ today.</p>
   <h3 class="heading settled" data-level="1.6" id="consensus-determining-mechanisms"><span class="secno">1.6. </span><span class="content">Consensus Determining Mechanisms</span><a class="self-link" href="#consensus-determining-mechanisms"></a></h3>
   <blockquote>
    <p>It is the responsibility of the chair of the technical committee or
subcommittee, in consultation with the secretary of his/her committee and, if
necessary, the project leader, to judge whether there is sufficient support.</p>
    <ul>
     <li data-md>
      <p>ISO/IEC Directives, Part 1, 2.5.6</p>
    </ul>
   </blockquote>
   <blockquote>
    <p>The responsibility for assessing whether or not consensus has been reached
rests entirely with the leadership.</p>
    <ul>
     <li data-md>
      <p>ISO/IEC Directives, Part 1, 2.5.6</p>
    </ul>
   </blockquote>
   <blockquote>
    <p>The notion of "concerned interest(s)" will vary depending on the dynamics of
the committee and shall therefore be determined by the committee leadership
on a case by case basis.</p>
    <ul>
     <li data-md>
      <p>ISO/IEC Directives, Part 1, 2.5.6</p>
    </ul>
   </blockquote>
   <p>Within evolution, study, and core groups, we do not make decisions using polls.
We make decisions by consensus not by vote.
Chairs often use polls as a mechanism to help them determine consensus.
The chair’s determination of consensus is authoritative, not the
  straw poll.</p>
   <p>If a chair states that the result of poll does not have consensus, then results
  should not be cited as a representation of the position of the group.</p>
   <p>For example, a chair may have reason to believe the poll is not an accurate
  representation of the stakeholders in the group for a variety of different
  reasons:</p>
   <ul>
    <li data-md>
     <p>Lack of participation by certain stakeholders in the group.</p>
    <li data-md>
     <p>Disproportionate participation by participants who are not regular participants
and stakeholders in the group, even if they are stakeholders on the
particular matter at hand.</p>
    <li data-md>
     <p>Disproportionate participation by the authors of the proposal under
consideration.</p>
    <li data-md>
     <p>Large disparities between the positions of regular stakeholders and others
participating in the poll.</p>
    <li data-md>
     <p>Complexities of stakeholder positions that cannot be accurately expressed in
a poll.</p>
   </ul>
   <p>For example, suppose we had this result:</p>
   <blockquote>
     <b>POLL: Use electronic straw polls in the Ponies and Unicorns Study Group.</b> 
    <table>
     <tbody>
      <tr>
       <th>Strongly For 
       <th>Weakly For 
       <th>Neutral 
       <th>Weakly Against 
       <th>Strongly Against 
      <tr>
       <td>8 
       <td>0 
       <td>5 
       <td>0 
       <td>2 
    </table>
   </blockquote>
   <p>This poll result might appear to have weak consensus.
But, suppose also that:</p>
   <ul>
    <li data-md>
     <p>All 8 of the people who voted strongly or weakly for the poll were authors of
the proposal who are new to the committee and who are not regulars in the
group.</p>
    <li data-md>
     <p>Most of the 5 people who voted neutral were regular attendees of the group,
and noted in their poll comment that they voted neutral because
they felt they did not understand the proposal.</p>
    <li data-md>
     <p>1 long time regular member of the group voted strongly against because they
read the proposal very thoroughly and provided a lot of feedback to the
authors, and mentioned in their comment that they felt no steps had been
taken to address their feedback.</p>
    <li data-md>
     <p>Another long time regular member of the group voted strongly against
because they are knowledgable about the subject matter and believe the
proposal is a mistake.</p>
   </ul>
   <p>In this circumstance, a chair may determine that there is no consensus on this
  matter.
Most importantly, the proposal hasn’t achieved absence of sustained opposition.
The chair would inform the authors and the group that the poll was inconclusive
  and would have to be retaken after another round of discussions.
They would also provide the authors with some guidance on what steps they might
  take to improving understanding and increase consensus.</p>
   <p>The electronic straw poll mechanism makes it easier for chairs to detect
  irregularities in polling; polls will be recorded with greater accuracy,
  voters will be asked to provide a comment with their vote, and chairs will be able
  to identify who voted and how they voted.
If irregularities are observed, they will be corrected and adjustments to our
  process can be made if needed.</p>
   <h2 class="heading settled" data-level="2" id="proposed-changes"><span class="secno">2. </span><span class="content">Proposed Changes</span><a class="self-link" href="#proposed-changes"></a></h2>
   <p>Today, the purpose of meetings is to give formal feedback to help proposals
  progress and to make decisions.
Work on proposals is largely done outside of meetings.
At meetings, we review proposals, identifying where additional work is needed
  before a decision is made, and, when sufficient information is available,
  making decisions about how and if a proposal should proceed.</p>
   <p>We propose a new model, where the purpose of meetings is to give formal feedback
  and to drive decision making, but not require that the decision making happen
  at the meetings themselves.
Meetings would continue to be used to review and refine proposals and identify
  open questions.
However, instead of focusing on making decisions at meetings, we would instead
  focus on identifying the decisions that need to be made.</p>
   <p>We propose that language and library evolution chairs have the option to conduct <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls②">straw polls</a> asynchronously through either email or an electronic polling
  service run by the Standard C++ Foundation.</p>
   <p>Henceforth, <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls③">straw polls</a> should be divided into two categories:</p>
   <ul>
    <li data-md>
     <p><dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport id="direction-straw-polls">Direction Straw Polls</dfn>: These polls are taken to reaffirm a
  proposal’s direction, or suggest direction changes that a proposal should
  pursue in the next revision that comes before the study group taking the
  poll.
These polls will usually be taken on younger proposals, where there are still
  many open questions and areas for additional investigation.
Direction <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls④">straw polls</a> can only be taken on proposals that will return to
  the same group before proceeding further.
Dissent should be recorded, so that authors know what work needs to be
  performed to increase consensus in the next revision of their proposal.
The results of these polls can always be revisited if new information or new
  perspectives are discovered.
Direction polls do not change the status quo and can be revisited whenever
  we encounter new information or new perspectives.</p>
    <li data-md>
     <p><dfn class="dfn-paneled" data-dfn-type="dfn" data-noexport id="decision-straw-polls">Decision Straw Polls</dfn>: These polls are taken to make decisions
  regarding a proposal once the group is confident that
  all applicable and relevant aspects of the decision have been discussed.
These polls will typically be taken on proposals that have been in the
  group for a few revisions, but can also be taken when a
  proposal is an obvious one to approve, or when a proposal clearly has no
  chance of gaining consensus and should not be pursued further.
Decision <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls⑤">straw polls</a> may forward proposals to other evolution groups,
  study groups, or to core groups, as well as halt the progress of a proposal.
Traditionally, only core groups forward proposals to plenary.
Decision polls set the status quo.
Changing the status quo requires a stronger consensus with a clear rationale.</p>
   </ul>
   <p>We propose that the following guidelines should be followed when determining
  whether a poll should be taken synchronously or asynchronously:</p>
   <p>In Evolution and Library Evolution, at the chair’s discretion,</p>
   <ul>
    <li data-md>
     <p><a data-link-type="dfn" href="#decision-straw-polls" id="ref-for-decision-straw-polls①">decision straw polls</a> shall be conducted either:</p>
     <ul>
      <li data-md>
       <p>synchronously at face-to-face meetings, but not virtual meetings,
  (status quo), or</p>
      <li data-md>
       <p>asynchronously via electronic straw poll.</p>
     </ul>
    <li data-md>
     <p><a data-link-type="dfn" href="#direction-straw-polls" id="ref-for-direction-straw-polls①">direction straw polls</a> shall be conducted either:</p>
     <ul>
      <li data-md>
       <p>synchronously at face-to-face or virtual meetings (status quo), or</p>
      <li data-md>
       <p>asynchronously via electronic straw poll.</p>
     </ul>
   </ul>
   <h2 class="heading settled" data-level="3" id="electronic-straw-poll-specification"><span class="secno">3. </span><span class="content">Electronic Straw Poll Specification</span><a class="self-link" href="#electronic-straw-poll-specification"></a></h2>
   <p>Electronic <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls⑥">straw polls</a> shall be conducted through either a:</p>
   <ul>
    <li data-md>
     <p>A service hosted by the Standard C++ Foundation, or</p>
    <li data-md>
     <p>Via email.</p>
   </ul>
   <h3 class="heading settled" data-level="3.1" id="poll-structure"><span class="secno">3.1. </span><span class="content">Poll Structure</span><a class="self-link" href="#poll-structure"></a></h3>
   <p>Electronic <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls⑦">straw polls</a> shall support five-way polls.</p>
   <p>A five-way poll consists of an arbitrary statement, determined by the applicable
  chair.
The polarity of the poll shall be that voting "in favor" means changing the
  current status-quo.
Poll statements shall not be changed after the poll has begun.</p>
   <p>Polls shall only be conducted on published P- or N-numbered papers.
Polls shall provide:</p>
   <ul>
    <li data-md>
     <p>A summary of the discussion.</p>
    <li data-md>
     <p>A summary of notable implications for different outcomes of the poll.</p>
    <li data-md>
     <p>Links to:</p>
    <li data-md>
     <p>Relevant published P- or N-numbered papers applicable to the polls.</p>
    <li data-md>
     <p>Relevant minutes for those papers, prior polls.</p>
    <li data-md>
     <p>The <a href="https://github.com/cplusplus/papers/issues">GitHub issue</a> for said papers.</p>
   </ul>
   <p>In a five-way poll, voters may select a stance on the statement being polled
  from these five options:</p>
   <table class="polls">
    <tbody>
     <tr>
      <td>Strongly For 
      <td>Weakly For 
      <td>Neutral 
      <td>Weakly Against 
      <td>Strongly Against 
   </table>
   <p>Other types of polls may also be supported.</p>
   <h3 class="heading settled" data-level="3.2" id="eligibility-for-voting"><span class="secno">3.2. </span><span class="content">Eligibility for Voting</span><a class="self-link" href="#eligibility-for-voting"></a></h3>
   <p>An individual is eligible to participate in an electronic <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls⑧">straw polls</a> if
  they are any of the following:</p>
   <ul>
    <li data-md>
     <p>A member of a National Body that participates in the Standard C++ Committee,
e.g. someone who is in the ISO Global Directory.</p>
    <li data-md>
     <p>Any person who has attended one of the past three face-to-face meetings.</p>
   </ul>
   <p>We will revisit these criteria as we gain field experience.</p>
   <h3 class="heading settled" data-level="3.3" id="voting"><span class="secno">3.3. </span><span class="content">Voting</span><a class="self-link" href="#voting"></a></h3>
   <p>Each voter may participate once on each poll.</p>
   <p>Voters shall leave a comment in addition to their vote.</p>
   <p>Each voter may change their vote and comment at any time prior to the closing of
  a vote.</p>
   <p>Each voter should be prompted to confirm that they have read the proposal and
  are familiar with the topic.</p>
   <h4 class="heading settled" data-level="3.3.1" id="voting-email-specific"><span class="secno">3.3.1. </span><span class="content">Voting (Email Specific)</span><a class="self-link" href="#voting-email-specific"></a></h4>
   <p>If email is used to conduct an electronic straw poll, voters shall submit their
  votes by emailing the chair who created the poll.
The subject of the email shall be specified by the chair.</p>
   <p>Chairs shall send a confirmation email that the vote has been received.
Voters are responsible for ensuring that they have received a confirmation
  prior to the close of the poll; only votes that have been confirmed by a
  chair will be counted.</p>
   <h4 class="heading settled" data-level="3.3.2" id="voting-service-specific"><span class="secno">3.3.2. </span><span class="content">Voting (Service Specific)</span><a class="self-link" href="#voting-service-specific"></a></h4>
   <p>If a service is used to conduct an electronic straw poll and a voter is
  unable to vote using the service for any reason, they may submit their vote
  by emailing the chair who created the poll.</p>
   <h3 class="heading settled" data-level="3.4" id="creation-of-polls"><span class="secno">3.4. </span><span class="content">Creation of Polls</span><a class="self-link" href="#creation-of-polls"></a></h3>
   <p>Chairs may create polls.</p>
   <h3 class="heading settled" data-level="3.5" id="withdrawal-of-polls"><span class="secno">3.5. </span><span class="content">Withdrawal of Polls</span><a class="self-link" href="#withdrawal-of-polls"></a></h3>
   <p>The chair who created a poll may withdraw or extend the duration of a poll.</p>
   <p>If a poll is withdrawn or extended, the chair shall make a comment explaining
  why the poll was withdrawn.</p>
   <h3 class="heading settled" data-level="3.6" id="modification-of-polls"><span class="secno">3.6. </span><span class="content">Modification of Polls</span><a class="self-link" href="#modification-of-polls"></a></h3>
   <p>The chair who created a poll may modify the poll after the start of the
  polling period.
Polls shall only be modified to correct mistakes in the poll wording, not to
  change the intent of the poll.</p>
   <p>If a chair modifies a poll, all eligible voters shall be notified and informed
  that they may request the poll be withdrawn.
If any eligible voter requests the poll be withdrawn, the poll shall be withdrawn.</p>
   <h3 class="heading settled" data-level="3.7" id="discussion-prior-to-polling"><span class="secno">3.7. </span><span class="content">Discussion Prior to Polling</span><a class="self-link" href="#discussion-prior-to-polling"></a></h3>
   <p>The subject of a poll shall be discussed either at a meeting or via the
  applicable mailing list prior to the start of a poll.</p>
   <h3 class="heading settled" data-level="3.8" id="poll-notifications"><span class="secno">3.8. </span><span class="content">Poll Notifications</span><a class="self-link" href="#poll-notifications"></a></h3>
   <p>A new mailing list, polls@lists.isocpp.org, shall be established.
This mailing list shall be used for notifications regarding polls, but not for
  discussions of polls or poll results.</p>
   <p>Once a poll has been scheduled for an upcoming quarterly poll, chairs shall
  notify the applicable mailing lists and polls@lists.isocpp.org.</p>
   <p>At the start of any teleconference meeting, if that group has open polls, the
  chair shall notify the group of said polls.</p>
   <h3 class="heading settled" data-level="3.9" id="poll-duration"><span class="secno">3.9. </span><span class="content">Poll Duration</span><a class="self-link" href="#poll-duration"></a></h3>
   <p>Polls are open for no less than a month before a quarterly poll closes.</p>
   <h3 class="heading settled" data-level="3.10" id="poll-results"><span class="secno">3.10. </span><span class="content">Poll Results</span><a class="self-link" href="#poll-results"></a></h3>
   <p>The position and comments of all voters shall remain hidden, until the poll
  closes.
When the poll closes, the position and comments and their attribution to
  specific voters shall be made available to C++ Committee officers only.
An anonymized selected set of comments may be made available to all C++
  Committee members.</p>
   <p>Once a poll closes, the chair who created the poll shall receive an email
  notifying them that the poll is over.
Then, the chair who created the poll shall distribute their interpretation of
  what consensus is based on the poll results via the applicable mailing lists,
  minutes pages, and/or GitHub issues.</p>
   <p>No one shall share the identities and positions of voters with those who are
  not eligible voters without the explicit permission of said voters.
Poll statements, vote counts, and the chair’s interpretation of the results
  may be shared with anyone.</p>
   <h2 class="heading settled" data-level="4" id="faq"><span class="secno">4. </span><span class="content">FAQ</span><a class="self-link" href="#faq"></a></h2>
   <p><b>Q: Do you think we should stop having face-to-face meetings entirely?</b></p>
   <p>No.</p>
   <p>Developing processes for collaborating remotely and electronically does not mean
  ceasing our face-to-face collaborations.
Face-to-face meetings have value and we believe face-to-face meetings should
  be held in the future.
We do believe that enabling remote participation in such meetings is important.</p>
   <p><b>Q: Won’t electronic <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls⑨">straw polls</a> allow people who weren’t involved in discussion at a meeting to vote?</b></p>
   <p>Yes.</p>
   <p>In synchronous decision making, we discourage those who were not present for the
  discussion prior to a poll from voting because they do not have time to
  familiarize themselves with the discussion before the poll is taken.
In asynchronous decision making, those not present for a discussion will have
  ample time to familiarize themselves with the discussion and background.</p>
   <p>It is true that some people may choose to not familiarize themselves with the
  subject matter and prior discussions and still vote.
However, synchronous decision making is also susceptible to inattentiveness.
The presence of an individual at a particular meeting does not imply that they
  were paying attention during the meeting.</p>
   <p>The best we can do is what we have always done: encourage people to either
  familiarize themselves with the subject matter and discussion or choose to not
  vote. It is important to expect and assume that all Committee participants
  are acting professionally and in good-faith.</p>
   <p>Additionally, unlike at face-to-face meetings, chairs will have a list of
  everyone who voted in the poll and how they voted.
If any sort of voting irregularities appear, the added transparency will make
  it noticeable.
If such irregularities do occur, we can correct them and adjust our process.</p>
   <p>We make decisions by consensus, not majority.
If the chair has reason to believe the results of the poll do not reflect the
  consensus of the group, the poll can be discarded and the subject matter
  revisited.</p>
   <p><b>Q: Will my vote and comments on a poll be publicly attributed to me outside of the committee?</b></p>
   <p>No, unless you choose to make them public yourself.</p>
   <p>Poll results will follow the same rules we use for minutes today:</p>
   <ul>
    <li data-md>
     <p>The poll statement, numeric results, and chair’s interpretation of consensus
of a poll can be made publicly available.</p>
    <li data-md>
     <p>Anonymized summaries of comments can be made publicly available.</p>
    <li data-md>
     <p>Attribution of votes or comments to specific individuals, companies, or
National Bodies without their express permission is forbidden.</p>
   </ul>
   <p><b>Q: Shouldn’t voting be anonymous?</b></p>
   <p>It’s never been anonymous in person, we just never or rarely record who voted
  which way.
Polling within ISO is never anonymous either, with the exception of personnel
  matters.</p>
   <p>Anonymous voting would be detrimental to the purpose of polling.
Polling is a mechanism for chairs to determine consensus.
The numeric results of the poll are not important themselves, what’s important
  is gathering the positions of everyone involved.</p>
   <p>If we don’t have consensus on a particular matter, it would be very difficult
  to attempt to reach consensus if we were unable to identify who held differing
  opinions.
Ultimately, our goal is to work together to reach an outcome that is acceptable
  to everyone.
That would be harder to do if voting was anonymous.</p>
   <p><b>Q: What about plenary and <a data-link-type="dfn" href="#plenary-polls" id="ref-for-plenary-polls">plenary polls</a>?</b></p>
   <p>This proposal is about evolution groups' polls only.</p>
   <p>This proposal does not suggest any changes to our plenary process at this time.
We believe incremental change is safer than drastic change.
We suggest that the Standard C++ Committee start pursuing electronic <a data-link-type="dfn" href="#straw-polls" id="ref-for-straw-polls①⓪">straw polls</a> for evolution groups and assess the effectiveness and
  ramifications of this change in a few months before considering further
  process changes.</p>
   <p>There is no pressing need to hold a plenary meeting for the next few months.
We do not need to advance any Standard C++ work items to the next publication
  stage in the immediate future.</p>
   <p>In the future, if we decide to electronically conduct <a data-link-type="dfn" href="#plenary-polls" id="ref-for-plenary-polls①">plenary polls</a>, there
  are already systems in place to handle electronic polling of formal
  individual members within an ISO committee.
ISO provides a electronic polling system which we could use to poll the
  individual membership.
ISO polls for creating or advancing work items to the next publication stage
  are voted on by National Bodies, not the individual members.
However, ISO provides another type of poll, <a href="https://helpdesk-docs.iso.org/article/318-create-wg">Working Group consultations</a>,
  which the formal individual members of a Committee vote on.</p>
   <p>Given that technical discussion is already discouraged for <a data-link-type="dfn" href="#plenary-polls" id="ref-for-plenary-polls②">plenary polls</a> and
  is intended to happen disjointly in evolution and study groups prior the
  plenary, electronic voting for <a data-link-type="dfn" href="#plenary-polls" id="ref-for-plenary-polls③">plenary polls</a> seems like a natural fit.</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="index"><span class="content">Index</span><a class="self-link" href="#index"></a></h2>
  <h3 class="no-num no-ref heading settled" id="index-defined-here"><span class="content">Terms defined by this specification</span><a class="self-link" href="#index-defined-here"></a></h3>
  <ul class="index">
   <li><a href="#asynchronous-consensus-building">Asynchronous Consensus Building</a><span>, in §1.5</span>
   <li><a href="#decision-straw-polls">Decision Straw Polls</a><span>, in §2</span>
   <li><a href="#direction-straw-polls">Direction Straw Polls</a><span>, in §2</span>
   <li><a href="#plenary-polls">Plenary Polls</a><span>, in §1.4</span>
   <li><a href="#straw-polls">Straw Polls</a><span>, in §1.4</span>
   <li><a href="#synchronous-consensus-building">Synchronous Consensus Building</a><span>, in §1.5</span>
  </ul>
  <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-p0592r4">[P0592R4]
   <dd>Ville Voutilainen. <a href="https://wg21.link/p0592r4">To boldly suggest an overall plan for C++23</a>. 25 November 2019. URL: <a href="https://wg21.link/p0592r4">https://wg21.link/p0592r4</a>
   <dt id="biblio-p2138r2">[P2138R2]
   <dd>Ville Voutilainen. <a href="https://wg21.link/p2138r2">Rules of Design&lt;=>Wording engagement</a>. 15 June 2020. URL: <a href="https://wg21.link/p2138r2">https://wg21.link/p2138r2</a>
   <dt id="biblio-p2145r0">[P2145R0]
   <dd>Bryce Adelstein Lelbach, Titus Winters, Fabio Fracassi, Billy Baker, Nevin Liber, JF Bastien, David Stone, Botond Ballo, Tom Honermann. <a href="https://wg21.link/p2145r0">Evolving C++ Remotely</a>. 21 April 2020. URL: <a href="https://wg21.link/p2145r0">https://wg21.link/p2145r0</a>
   <dt id="biblio-p2145r1">[P2145R1]
   <dd>Bryce Adelstein Lelbach; et al. <a href="https://wg21.link/p2145r1">Evolving C++ Remotely</a>. 25 August 2020. URL: <a href="https://wg21.link/p2145r1">https://wg21.link/p2145r1</a>
  </dl>
  <aside class="dfn-panel" data-for="straw-polls">
   <b><a href="#straw-polls">#straw-polls</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-straw-polls">1. Introduction</a>
    <li><a href="#ref-for-straw-polls①">1.4. Prior Art</a>
    <li><a href="#ref-for-straw-polls②">2. Proposed Changes</a> <a href="#ref-for-straw-polls③">(2)</a> <a href="#ref-for-straw-polls④">(3)</a> <a href="#ref-for-straw-polls⑤">(4)</a>
    <li><a href="#ref-for-straw-polls⑥">3. Electronic Straw Poll Specification</a>
    <li><a href="#ref-for-straw-polls⑦">3.1. Poll Structure</a>
    <li><a href="#ref-for-straw-polls⑧">3.2. Eligibility for Voting</a>
    <li><a href="#ref-for-straw-polls⑨">4. FAQ</a> <a href="#ref-for-straw-polls①⓪">(2)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="plenary-polls">
   <b><a href="#plenary-polls">#plenary-polls</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-plenary-polls">4. FAQ</a> <a href="#ref-for-plenary-polls①">(2)</a> <a href="#ref-for-plenary-polls②">(3)</a> <a href="#ref-for-plenary-polls③">(4)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="synchronous-consensus-building">
   <b><a href="#synchronous-consensus-building">#synchronous-consensus-building</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-synchronous-consensus-building">1.5. Consensus Building Mechanisms</a> <a href="#ref-for-synchronous-consensus-building①">(2)</a> <a href="#ref-for-synchronous-consensus-building②">(3)</a> <a href="#ref-for-synchronous-consensus-building③">(4)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="asynchronous-consensus-building">
   <b><a href="#asynchronous-consensus-building">#asynchronous-consensus-building</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-asynchronous-consensus-building">1.4. Prior Art</a>
    <li><a href="#ref-for-asynchronous-consensus-building①">1.5. Consensus Building Mechanisms</a> <a href="#ref-for-asynchronous-consensus-building②">(2)</a> <a href="#ref-for-asynchronous-consensus-building③">(3)</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="direction-straw-polls">
   <b><a href="#direction-straw-polls">#direction-straw-polls</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-direction-straw-polls">1.1. Summary</a>
    <li><a href="#ref-for-direction-straw-polls①">2. Proposed Changes</a>
   </ul>
  </aside>
  <aside class="dfn-panel" data-for="decision-straw-polls">
   <b><a href="#decision-straw-polls">#decision-straw-polls</a></b><b>Referenced in:</b>
   <ul>
    <li><a href="#ref-for-decision-straw-polls">1.1. Summary</a>
    <li><a href="#ref-for-decision-straw-polls①">2. Proposed Changes</a>
   </ul>
  </aside>
<script>/* script-dfn-panel */

document.body.addEventListener("click", function(e) {
    var queryAll = function(sel) { return [].slice.call(document.querySelectorAll(sel)); }
    // Find the dfn element or panel, if any, that was clicked on.
    var el = e.target;
    var target;
    var hitALink = false;
    while(el.parentElement) {
        if(el.tagName == "A") {
            // Clicking on a link in a <dfn> shouldn't summon the panel
            hitALink = true;
        }
        if(el.classList.contains("dfn-paneled")) {
            target = "dfn";
            break;
        }
        if(el.classList.contains("dfn-panel")) {
            target = "dfn-panel";
            break;
        }
        el = el.parentElement;
    }
    if(target != "dfn-panel") {
        // Turn off any currently "on" or "activated" panels.
        queryAll(".dfn-panel.on, .dfn-panel.activated").forEach(function(el){
            el.classList.remove("on");
            el.classList.remove("activated");
        });
    }
    if(target == "dfn" && !hitALink) {
        // open the panel
        var dfnPanel = document.querySelector(".dfn-panel[data-for='" + el.id + "']");
        if(dfnPanel) {
            dfnPanel.classList.add("on");
            var rect = el.getBoundingClientRect();
            dfnPanel.style.left = window.scrollX + rect.right + 5 + "px";
            dfnPanel.style.top = window.scrollY + rect.top + "px";
            var panelRect = dfnPanel.getBoundingClientRect();
            var panelWidth = panelRect.right - panelRect.left;
            if(panelRect.right > document.body.scrollWidth && (rect.left - (panelWidth + 5)) > 0) {
                // Reposition, because the panel is overflowing
                dfnPanel.style.left = window.scrollX + rect.left - (panelWidth + 5) + "px";
            }
        } else {
            console.log("Couldn't find .dfn-panel[data-for='" + el.id + "']");
        }
    } else if(target == "dfn-panel") {
        // Switch it to "activated" state, which pins it.
        el.classList.add("activated");
        el.style.left = null;
        el.style.top = null;
    }

});
</script>
