<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang xml:lang>
<head>
  <meta charset="utf-8" />
  <meta name="generator" content="mpark/wg21" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
  <meta name="dcterms.date" content="2024-02-15" />
  <meta name="keywords" content="C++,cplusplus,wg21,EWG,LEWG,Evolution,deprecated,C++26,Annex
D" />
  <meta name="description" content="Review of the deprecated features in C++23 for their continuing applicability in C++26" />
  <title>Review Annex D for C++26</title>
  <style>
      code{white-space: pre-wrap;}
      span.smallcaps{font-variant: small-caps;}
      span.underline{text-decoration: underline;}
      div.column{display: inline-block; vertical-align: top; width: 50%;}
      div.csl-block{margin-left: 1.5em;}
      ul.task-list{list-style: none;}
      pre > code.sourceCode { white-space: pre; position: relative; }
      pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
      pre > code.sourceCode > span:empty { height: 1.2em; }
      .sourceCode { overflow: visible; }
      code.sourceCode > span { color: inherit; text-decoration: inherit; }
      div.sourceCode { margin: 1em 0; }
      pre.sourceCode { margin: 0; }
      @media screen {
      div.sourceCode { overflow: auto; }
      }
      @media print {
      pre > code.sourceCode { white-space: pre-wrap; }
      pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
      }
      pre.numberSource code
        { counter-reset: source-line 0; }
      pre.numberSource code > span
        { position: relative; left: -4em; counter-increment: source-line; }
      pre.numberSource code > span > a:first-child::before
        { content: counter(source-line);
          position: relative; left: -1em; text-align: right; vertical-align: baseline;
          border: none; display: inline-block;
          -webkit-touch-callout: none; -webkit-user-select: none;
          -khtml-user-select: none; -moz-user-select: none;
          -ms-user-select: none; user-select: none;
          padding: 0 4px; width: 4em;
          color: #aaaaaa;
        }
      pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
      div.sourceCode
        {  background-color: #f6f8fa; }
      @media screen {
      pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
      }
      code span { } /* Normal */
      code span.al { color: #ff0000; } /* Alert */
      code span.an { } /* Annotation */
      code span.at { } /* Attribute */
      code span.bn { color: #9f6807; } /* BaseN */
      code span.bu { color: #9f6807; } /* BuiltIn */
      code span.cf { color: #00607c; } /* ControlFlow */
      code span.ch { color: #9f6807; } /* Char */
      code span.cn { } /* Constant */
      code span.co { color: #008000; font-style: italic; } /* Comment */
      code span.cv { color: #008000; font-style: italic; } /* CommentVar */
      code span.do { color: #008000; } /* Documentation */
      code span.dt { color: #00607c; } /* DataType */
      code span.dv { color: #9f6807; } /* DecVal */
      code span.er { color: #ff0000; font-weight: bold; } /* Error */
      code span.ex { } /* Extension */
      code span.fl { color: #9f6807; } /* Float */
      code span.fu { } /* Function */
      code span.im { } /* Import */
      code span.in { color: #008000; } /* Information */
      code span.kw { color: #00607c; } /* Keyword */
      code span.op { color: #af1915; } /* Operator */
      code span.ot { } /* Other */
      code span.pp { color: #6f4e37; } /* Preprocessor */
      code span.re { } /* RegionMarker */
      code span.sc { color: #9f6807; } /* SpecialChar */
      code span.ss { color: #9f6807; } /* SpecialString */
      code span.st { color: #9f6807; } /* String */
      code span.va { } /* Variable */
      code span.vs { color: #9f6807; } /* VerbatimString */
      code span.wa { color: #008000; font-weight: bold; } /* Warning */
      code.diff {color: #898887}
      code.diff span.va {color: #006e28}
      code.diff span.st {color: #bf0303}
  </style>
  <style type="text/css">
body {
margin: 5em;
font-family: serif;

hyphens: auto;
line-height: 1.35;
text-align: justify;
}
@media screen and (max-width: 30em) {
body {
margin: 1.5em;
}
}
div.wrapper {
max-width: 60em;
margin: auto;
}
ul {
list-style-type: none;
padding-left: 2em;
margin-top: -0.2em;
margin-bottom: -0.2em;
}
a {
text-decoration: none;
color: #4183C4;
}
a.hidden_link {
text-decoration: none;
color: inherit;
}
li {
margin-top: 0.6em;
margin-bottom: 0.6em;
}
h1, h2, h3, h4 {
position: relative;
line-height: 1;
}
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;
font-family: sans-serif;
font-weight: normal;
font-size: 83%;
}
a.self-link:hover { opacity: 1; }
a.self-link::before { content: "§"; }
ul > li:before {
content: "\2014";
position: absolute;
margin-left: -1.5em;
}
:target { background-color: #C9FBC9; }
:target .codeblock { background-color: #C9FBC9; }
:target ul { background-color: #C9FBC9; }
.abbr_ref { float: right; }
.folded_abbr_ref { float: right; }
:target .folded_abbr_ref { display: none; }
:target .unfolded_abbr_ref { float: right; display: inherit; }
.unfolded_abbr_ref { display: none; }
.secnum { display: inline-block; min-width: 35pt; }
.header-section-number { display: inline-block; min-width: 35pt; }
.annexnum { display: block; }
div.sourceLinkParent {
float: right;
}
a.sourceLink {
position: absolute;
opacity: 0;
margin-left: 10pt;
}
a.sourceLink:hover {
opacity: 1;
}
a.itemDeclLink {
position: absolute;
font-size: 75%;
text-align: right;
width: 5em;
opacity: 0;
}
a.itemDeclLink:hover { opacity: 1; }
span.marginalizedparent {
position: relative;
left: -5em;
}
li span.marginalizedparent { left: -7em; }
li ul > li span.marginalizedparent { left: -9em; }
li ul > li ul > li span.marginalizedparent { left: -11em; }
li ul > li ul > li ul > li span.marginalizedparent { left: -13em; }
div.footnoteNumberParent {
position: relative;
left: -4.7em;
}
a.marginalized {
position: absolute;
font-size: 75%;
text-align: right;
width: 5em;
}
a.enumerated_item_num {
position: relative;
left: -3.5em;
display: inline-block;
margin-right: -3em;
text-align: right;
width: 3em;
}
div.para { margin-bottom: 0.6em; margin-top: 0.6em; text-align: justify; }
div.section { text-align: justify; }
div.sentence { display: inline; }
span.indexparent {
display: inline;
position: relative;
float: right;
right: -1em;
}
a.index {
position: absolute;
display: none;
}
a.index:before { content: "⟵"; }

a.index:target {
display: inline;
}
.indexitems {
margin-left: 2em;
text-indent: -2em;
}
div.itemdescr {
margin-left: 3em;
}
.bnf {
font-family: serif;
margin-left: 40pt;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
.ncbnf {
font-family: serif;
margin-top: 0.5em;
margin-bottom: 0.5em;
margin-left: 40pt;
}
.ncsimplebnf {
font-family: serif;
font-style: italic;
margin-top: 0.5em;
margin-bottom: 0.5em;
margin-left: 40pt;
background: inherit; 
}
span.textnormal {
font-style: normal;
font-family: serif;
white-space: normal;
display: inline-block;
}
span.rlap {
display: inline-block;
width: 0px;
}
span.descr { font-style: normal; font-family: serif; }
span.grammarterm { font-style: italic; }
span.term { font-style: italic; }
span.terminal { font-family: monospace; font-style: normal; }
span.nonterminal { font-style: italic; }
span.tcode { font-family: monospace; font-style: normal; }
span.textbf { font-weight: bold; }
span.textsc { font-variant: small-caps; }
a.nontermdef { font-style: italic; font-family: serif; }
span.emph { font-style: italic; }
span.techterm { font-style: italic; }
span.mathit { font-style: italic; }
span.mathsf { font-family: sans-serif; }
span.mathrm { font-family: serif; font-style: normal; }
span.textrm { font-family: serif; }
span.textsl { font-style: italic; }
span.mathtt { font-family: monospace; font-style: normal; }
span.mbox { font-family: serif; font-style: normal; }
span.ungap { display: inline-block; width: 2pt; }
span.textit { font-style: italic; }
span.texttt { font-family: monospace; }
span.tcode_in_codeblock { font-family: monospace; font-style: normal; }
span.phantom { color: white; }

span.math { font-style: normal; }
span.mathblock {
display: block;
margin-left: auto;
margin-right: auto;
margin-top: 1.2em;
margin-bottom: 1.2em;
text-align: center;
}
span.mathalpha {
font-style: italic;
}
span.synopsis {
font-weight: bold;
margin-top: 0.5em;
display: block;
}
span.definition {
font-weight: bold;
display: block;
}
.codeblock {
margin-left: 1.2em;
line-height: 127%;
}
.outputblock {
margin-left: 1.2em;
line-height: 127%;
}
div.itemdecl {
margin-top: 2ex;
}
code.itemdeclcode {
white-space: pre;
display: block;
}
span.textsuperscript {
vertical-align: super;
font-size: smaller;
line-height: 0;
}
.footnotenum { vertical-align: super; font-size: smaller; line-height: 0; }
.footnote {
font-size: small;
margin-left: 2em;
margin-right: 2em;
margin-top: 0.6em;
margin-bottom: 0.6em;
}
div.minipage {
display: inline-block;
margin-right: 3em;
}
div.numberedTable {
text-align: center;
margin: 2em;
}
div.figure {
text-align: center;
margin: 2em;
}
table {
border: 1px solid black;
border-collapse: collapse;
margin-left: auto;
margin-right: auto;
margin-top: 0.8em;
text-align: left;
hyphens: none; 
}
td, th {
padding-left: 1em;
padding-right: 1em;
vertical-align: top;
}
td.empty {
padding: 0px;
padding-left: 1px;
}
td.left {
text-align: left;
}
td.right {
text-align: right;
}
td.center {
text-align: center;
}
td.justify {
text-align: justify;
}
td.border {
border-left: 1px solid black;
}
tr.rowsep, td.cline {
border-top: 1px solid black;
}
tr.even, tr.odd {
border-bottom: 1px solid black;
}
tr.capsep {
border-top: 3px solid black;
border-top-style: double;
}
tr.header {
border-bottom: 3px solid black;
border-bottom-style: double;
}
th {
border-bottom: 1px solid black;
}
span.centry {
font-weight: bold;
}
div.table {
display: block;
margin-left: auto;
margin-right: auto;
text-align: center;
width: 90%;
}
span.indented {
display: block;
margin-left: 2em;
margin-bottom: 1em;
margin-top: 1em;
}
ol.enumeratea { list-style-type: none; background: inherit; }
ol.enumerate { list-style-type: none; background: inherit; }

code.sourceCode > span { display: inline; }
</style>
  <link href="data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AIJEAACCRAAAgkQAAIJEAACCRAAAgkQAVoJEAN6CRADegkQAWIJEAACCRAAAgkQAAIJEAACCRAAA////AP///wCCRAAAgkQAAIJEAACCRAAsgkQAvoJEAP+CRAD/gkQA/4JEAP+CRADAgkQALoJEAACCRAAAgkQAAP///wD///8AgkQAAIJEABSCRACSgkQA/IJEAP99PQD/dzMA/3czAP99PQD/gkQA/4JEAPyCRACUgkQAFIJEAAD///8A////AHw+AFiBQwDqgkQA/4BBAP9/PxP/uZd6/9rJtf/bybX/upd7/39AFP+AQQD/gkQA/4FDAOqAQgBc////AP///wDKklv4jlEa/3o7AP+PWC//8+3o///////////////////////z7un/kFox/35AAP+GRwD/mVYA+v///wD///8A0Zpk+NmibP+0d0T/8evj///////+/fv/1sKz/9bCs//9/fr//////+/m2/+NRwL/nloA/5xYAPj///8A////ANKaZPjRmGH/5cKh////////////k149/3UwAP91MQD/lmQ//86rhv+USg3/m1YA/5hSAP+bVgD4////AP///wDSmmT4zpJY/+/bx///////8+TV/8mLT/+TVx//gkIA/5lVAP+VTAD/x6B//7aEVv/JpH7/s39J+P///wD///8A0ppk+M6SWP/u2sf///////Pj1f/Nj1T/2KFs/8mOUv+eWhD/lEsA/8aee/+0glT/x6F7/7J8Rvj///8A////ANKaZPjRmGH/48Cf///////+/v7/2qt//82PVP/OkFX/37KJ/86siv+USg7/mVQA/5hRAP+bVgD4////AP///wDSmmT40ppk/9CVXP/69O////////7+/v/x4M//8d/P//7+/f//////9u7n/6tnJf+XUgD/nFgA+P///wD///8A0ppk+NKaZP/RmWL/1qNy//r07///////////////////////+vXw/9akdP/Wnmn/y5FY/6JfFvj///8A////ANKaZFTSmmTo0ppk/9GYYv/Ql1//5cWm//Hg0P/x4ND/5cWm/9GXYP/RmGH/0ppk/9KaZOjVnmpY////AP///wDSmmQA0ppkEtKaZI7SmmT60ppk/9CWX//OkVb/zpFW/9CWX//SmmT/0ppk/NKaZJDSmmQS0ppkAP///wD///8A0ppkANKaZADSmmQA0ppkKtKaZLrSmmT/0ppk/9KaZP/SmmT/0ppkvNKaZCrSmmQA0ppkANKaZAD///8A////ANKaZADSmmQA0ppkANKaZADSmmQA0ppkUtKaZNzSmmTc0ppkVNKaZADSmmQA0ppkANKaZADSmmQA////AP5/AAD4HwAA4AcAAMADAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAMADAADgBwAA+B8AAP5/AAAoAAAAIAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wCCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAAyCRACMgkQA6oJEAOqCRACQgkQAEIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAA////AP///wD///8A////AIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRABigkQA5oJEAP+CRAD/gkQA/4JEAP+CRADqgkQAZoJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAAD///8A////AP///wD///8AgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAA4gkQAwoJEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQAxIJEADyCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAAgkQAAP///wD///8A////AP///wCCRAAAgkQAAIJEAACCRAAAgkQAAIJEAACCRAAWgkQAmIJEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAJyCRAAYgkQAAIJEAACCRAAAgkQAAIJEAACCRAAA////AP///wD///8A////AIJEAACCRAAAgkQAAIJEAACCRAAAgkQAdIJEAPCCRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAP+CRAD/gkQA/4JEAPSCRAB4gkQAAIJEAACCRAAAgkQAAIJEAAD///8A////AP///wD///8AgkQAAIJEAACCRAAAgkQASoJEANKCRAD/gkQA/4JEAP+CRAD/g0YA/39AAP9zLgD/bSQA/2shAP9rIQD/bSQA/3MuAP9/PwD/g0YA/4JEAP+CRAD/gkQA/4JEAP+CRADUgkQAToJEAACCRAAAgkQAAP///wD///8A////AP///wB+PwAAgkUAIoJEAKiCRAD/gkQA/4JEAP+CRAD/hEcA/4BBAP9sIwD/dTAA/5RfKv+viF7/vp56/76ee/+wiF7/lWAr/3YxAP9sIwD/f0AA/4RHAP+CRAD/gkQA/4JEAP+CRAD/gkQArIJEACaBQwAA////AP///wD///8A////AIBCAEBzNAD6f0EA/4NFAP+CRAD/gkQA/4VIAP92MwD/bSUA/6N1Tv/ezsL/////////////////////////////////38/D/6V3Uv9uJgD/dTEA/4VJAP+CRAD/gkQA/4JEAP+BQwD/fUAA/4FDAEj///8A////AP///wD///8AzJRd5qBlKf91NgD/dDUA/4JEAP+FSQD/cy4A/3YyAP/PuKP//////////////////////////////////////////////////////9K7qP94NQD/ciwA/4VJAP+CRAD/fkEA/35BAP+LSwD/mlYA6v///wD///8A////AP///wDdpnL/4qx3/8KJUv+PUhf/cTMA/3AsAP90LgD/4dK+/////////////////////////////////////////////////////////////////+TYxf91MAD/dTIA/31CAP+GRwD/llQA/6FcAP+gWwD8////AP///wD///8A////ANGZY/LSm2X/4ap3/92mcP+wdT3/byQA/8mwj////////////////////////////////////////////////////////////////////////////+LYxv9zLgP/jUoA/59bAP+hXAD/nFgA/5xYAPL///8A////AP///wD///8A0ppk8tKaZP/RmWL/1p9q/9ubXv/XqXj////////////////////////////7+fD/vZyG/6BxS/+gcUr/vJuE//r37f//////////////////////3MOr/5dQBf+dVQD/nVkA/5xYAP+cWAD/nFgA8v///wD///8A////AP///wDSmmTy0ppk/9KaZP/SmWP/yohJ//jo2P//////////////////////4NTG/4JDFf9lGAD/bSQA/20kAP9kGAD/fz8S/+Xb0f//////5NG9/6txN/+LOgD/m1QA/51aAP+cWAD/m1cA/5xYAP+cWADy////AP///wD///8A////ANKaZPLSmmT/0ppk/8+TWf/Unmv//v37//////////////////////+TWRr/VwsA/35AAP+ERgD/g0UA/4JGAP9lHgD/kFga/8KXX/+TRwD/jT4A/49CAP+VTQD/n10A/5xYAP+OQQD/lk4A/55cAPL///8A////AP///wD///8A0ppk8tKaZP/SmmT/y4tO/92yiP//////////////////////8NnE/8eCQP+rcTT/ez0A/3IyAP98PgD/gEMA/5FSAP+USwD/jj8A/5lUAP+JNwD/yqV2/694Mf+HNQD/jkAA/82rf/+laBj/jT4A8v///wD///8A////AP///wDSmmTy0ppk/9KaZP/LiUr/4byY///////////////////////gupX/0I5P/+Wuev/Lklz/l1sj/308AP+QSwD/ol0A/59aAP+aVQD/k0oA/8yoh///////+fXv/6pwO//Lp3v///////Pr4f+oay7y////AP///wD///8A////ANKaZPLSmmT/0ppk/8uJSv/hvJj//////////////////////+G7l//Jhkb/0ppk/96nc//fqXX/x4xO/6dkFP+QSQD/llEA/5xXAP+USgD/yaOA///////38uv/qG05/8ijdv//////8efb/6ZpLPL///8A////AP///wD///8A0ppk8tKaZP/SmmT/zIxO/9yxh///////////////////////7dbA/8iEQf/Sm2X/0Zlj/9ScZv/eqHf/2KJv/7yAQf+XTgD/iToA/5lSAP+JNgD/yKFv/611LP+HNQD/jT8A/8qmeP+kZRT/jT4A8v///wD///8A////AP///wDSmmTy0ppk/9KaZP/Pk1n/1J5q//78+//////////////////+/fv/1aFv/8iEQv/Tm2b/0ppl/9GZY//Wn2z/1pZc/9eldf/Bl2b/kUcA/4w9AP+OQAD/lUwA/59eAP+cWQD/jT8A/5ZOAP+eXADy////AP///wD///8A////ANKaZPLSmmT/0ppk/9KZY//KiEn/8d/P///////////////////////47+f/05tm/8iCP//KiEj/yohJ/8eCP//RmGH//vfy///////n1sP/rXQ7/4k4AP+TTAD/nVoA/5xYAP+cVwD/nFgA/5xYAPL///8A////AP///wD///8A0ppk8tKaZP/SmmT/0ptl/8uLTf/aq37////////////////////////////+/fz/6c2y/961jv/etY7/6Myx//78+v//////////////////////3MWv/5xXD/+ORAD/mFQA/51ZAP+cWAD/nFgA8v///wD///8A////AP///wDSmmTy0ppk/9KaZP/SmmT/0ppk/8mFRP/s1b//////////////////////////////////////////////////////////////////////////////+PD/0JFU/7NzMv+WUQD/kUsA/5tXAP+dWQDy////AP///wD///8A////ANKaZP/SmmT/0ppk/9KaZP/Sm2X/z5NZ/8yMT//z5NX/////////////////////////////////////////////////////////////////9Ofa/8yNUP/UmGH/36p5/8yTWv+qaSD/kksA/5ROAPz///8A////AP///wD///8A0ppk5NKaZP/SmmT/0ppk/9KaZP/TnGf/zY9T/82OUv/t1sD//////////////////////////////////////////////////////+7Yw//OkFX/zI5R/9OcZ//SmmP/26V0/9ymdf/BhUf/ol8R6P///wD///8A////AP///wDSmmQ80ppk9tKaZP/SmmT/0ppk/9KaZP/TnGj/zpFW/8qJSv/dson/8uHS//////////////////////////////////Lj0//etIv/y4lL/86QVf/TnGj/0ppk/9KaZP/RmWP/05xn/9ymdfjUnWdC////AP///wD///8A////ANKaZADSmmQc0ppkotKaZP/SmmT/0ppk/9KaZP/Tm2b/0Zli/8qJSf/NjlH/16Z3/+G8mP/myKr/5siq/+G8mP/Xp3f/zY5S/8qISf/RmGH/05tm/9KaZP/SmmT/0ppk/9KaZP/SmmSm0pljINWdaQD///8A////AP///wD///8A0ppkANKaZADSmmQA0ppkQtKaZMrSmmT/0ppk/9KaZP/SmmT/0ptl/9GYYf/Nj1P/y4lL/8qISP/KiEj/y4lK/82PU//RmGH/0ptl/9KaZP/SmmT/0ppk/9KaZP/SmmTO0ppkRtKaZADSmmQA0ppkAP///wD///8A////AP///wDSmmQA0ppkANKaZADSmmQA0ppkANKaZGzSmmTu0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmTw0ppkcNKaZADSmmQA0ppkANKaZADSmmQA////AP///wD///8A////ANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZBLSmmSQ0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppklNKaZBTSmmQA0ppkANKaZADSmmQA0ppkANKaZAD///8A////AP///wD///8A0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQy0ppkutKaZP/SmmT/0ppk/9KaZP/SmmT/0ppk/9KaZP/SmmT/0ppkvtKaZDbSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkAP///wD///8A////AP///wDSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkXNKaZODSmmT/0ppk/9KaZP/SmmT/0ppk5NKaZGDSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA////AP///wD///8A////ANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkBtKaZIbSmmTo0ppk6tKaZIrSmmQK0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZADSmmQA0ppkANKaZAD///8A////AP/8P///+B///+AH//+AAf//AAD//AAAP/AAAA/gAAAHwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA+AAAAfwAAAP/AAAP/8AAP//gAH//+AH///4H////D//" rel="icon" />
  
  <!--[if lt IE 9]>
    <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
  <![endif]-->
</head>
<body>
<div class="wrapper">
<header id="title-block-header">
<h1 class="title" style="text-align:center">Review Annex D for
C++26</h1>
<h3 class="subtitle" style="text-align:center">Recommendations to remove
or undeprecate specific features</h3>
<table style="border:none;float:right">
  <tr>
    <td>Document #:</td>
    <td>P2863R4</td>
  </tr>
  <tr>
    <td>Date:</td>
    <td>2024-02-15</td>
  </tr>
  <tr>
    <td style="vertical-align:top">Project:</td>
    <td>Programming Language C++</td>
  </tr>
  <tr>
    <td style="vertical-align:top">Audience:</td>
    <td>
      EWG, LEWG<br>
    </td>
  </tr>
  <tr>
    <td style="vertical-align:top">Reply-to:</td>
    <td>
      Alisdair Meredith<br>&lt;<a href="mailto:ameredith1@bloomberg.net" class="email">ameredith1@bloomberg.net</a>&gt;<br>
    </td>
  </tr>
</table>
</header>
<div style="clear:both">
<div id="TOC" role="doc-toc">
<h1 id="toctitle">Contents</h1>
<ul>
<li><a href="#abstract" id="toc-abstract"><span class="toc-section-number">1</span> Abstract<span></span></a></li>
<li><a href="#revisions" id="toc-revisions"><span class="toc-section-number">2</span> Revision History<span></span></a>
<ul>
<li><a href="#r4-february-2024-midterm-mailing" id="toc-r4-february-2024-midterm-mailing">R4: February 2024 (midterm
mailing)<span></span></a></li>
<li><a href="#r3-december-2023-post-kona" id="toc-r3-december-2023-post-kona">R3: December 2023
(post-Kona)<span></span></a></li>
<li><a href="#r2-october-2023-pre-kona" id="toc-r2-october-2023-pre-kona">R2: October 2023
(pre-Kona)<span></span></a></li>
<li><a href="#r1-august-2023-post-varna-update" id="toc-r1-august-2023-post-varna-update">R1: August 2023 (post-Varna
update)<span></span></a></li>
<li><a href="#r0-may-2023-pre-varna-mailing" id="toc-r0-may-2023-pre-varna-mailing">R0: May 2023 (pre-Varna
mailing)<span></span></a></li>
</ul></li>
<li><a href="#outline" id="toc-outline"><span class="toc-section-number">3</span> Outline<span></span></a></li>
<li><a href="#methodology" id="toc-methodology"><span class="toc-section-number">4</span> Methodology<span></span></a></li>
<li><a href="#checklists" id="toc-checklists"><span class="toc-section-number">5</span> Checklist For
Recommendations<span></span></a>
<ul>
<li><a href="#checklists.core" id="toc-checklists.core"><span class="toc-section-number">5.1</span> Core<span></span></a></li>
<li><a href="#checklists.library" id="toc-checklists.library"><span class="toc-section-number">5.2</span> Library<span></span></a></li>
</ul></li>
<li><a href="#reviews" id="toc-reviews"><span class="toc-section-number">6</span> Review By Clause<span></span></a>
<ul>
<li><a href="#D.1" id="toc-D.1"><span class="toc-section-number">6.1</span> General
[depr.general]<span></span></a></li>
<li><a href="#D.2" id="toc-D.2"><span class="toc-section-number">6.2</span> Arithmetic conversion on
enumerations [depr.arith.conv.enum]<span></span></a>
<ul>
<li><a href="#ewg-review-2023-june-varna" id="toc-ewg-review-2023-june-varna"><span class="toc-section-number">6.2.1</span> EWG Review, 2023 June,
Varna<span></span></a></li>
<li><a href="#ewg-review-2023-november-kona" id="toc-ewg-review-2023-november-kona"><span class="toc-section-number">6.2.2</span> EWG Review, 2023 November,
Kona<span></span></a></li>
<li><a href="#mailing-december-2023" id="toc-mailing-december-2023"><span class="toc-section-number">6.2.3</span> Mailing, December
2023<span></span></a></li>
</ul></li>
<li><a href="#D.3" id="toc-D.3"><span class="toc-section-number">6.3</span> Implicit capture of
<code class="sourceCode default">*this</code> by reference
[depr.capture.this]<span></span></a>
<ul>
<li><a href="#ewg-review-2023-june-varna-1" id="toc-ewg-review-2023-june-varna-1"><span class="toc-section-number">6.3.1</span> EWG Review, 2023 June,
Varna<span></span></a></li>
</ul></li>
<li><a href="#D.4" id="toc-D.4"><span class="toc-section-number">6.4</span> Array comparisons
[depr.array.comp]<span></span></a>
<ul>
<li><a href="#ewg-review-2023-june-varna-2" id="toc-ewg-review-2023-june-varna-2"><span class="toc-section-number">6.4.1</span> EWG Review, 2023 June,
Varna<span></span></a></li>
<li><a href="#cwg-review-2023-june-varna" id="toc-cwg-review-2023-june-varna"><span class="toc-section-number">6.4.2</span> CWG Review, 2023 June,
Varna<span></span></a></li>
<li><a href="#mailing-october-2023" id="toc-mailing-october-2023"><span class="toc-section-number">6.4.3</span> Mailing, October
2023<span></span></a></li>
</ul></li>
<li><a href="#D.5" id="toc-D.5"><span class="toc-section-number">6.5</span> Deprecated
<code class="sourceCode default">volatile</code> types
[depr.volatile.type]<span></span></a>
<ul>
<li><a href="#ewg-review-2023-june-varna-3" id="toc-ewg-review-2023-june-varna-3"><span class="toc-section-number">6.5.1</span> EWG Review, 2023 June,
Varna<span></span></a></li>
</ul></li>
<li><a href="#D.6" id="toc-D.6"><span class="toc-section-number">6.6</span> Redeclaration of
<code class="sourceCode default">static constexpr</code> data members
[depr.static.constexpr]<span></span></a>
<ul>
<li><a href="#ewg-review-2023-june-varna-4" id="toc-ewg-review-2023-june-varna-4"><span class="toc-section-number">6.6.1</span> EWG Review, 2023 June,
Varna<span></span></a></li>
<li><a href="#mailing-october-2023-1" id="toc-mailing-october-2023-1"><span class="toc-section-number">6.6.2</span> Mailing, October
2023<span></span></a></li>
</ul></li>
<li><a href="#D.7" id="toc-D.7"><span class="toc-section-number">6.7</span> Non-local use of TU-local entities
[depr.local]<span></span></a>
<ul>
<li><a href="#ewg-review-2023-june-varna-5" id="toc-ewg-review-2023-june-varna-5"><span class="toc-section-number">6.7.1</span> EWG Review, 2023 June,
Varna<span></span></a></li>
</ul></li>
<li><a href="#D.8" id="toc-D.8"><span class="toc-section-number">6.8</span> Implicit declaration of copy
functions [depr.impldec]<span></span></a>
<ul>
<li><a href="#ewg-review-2023-june-varna-6" id="toc-ewg-review-2023-june-varna-6"><span class="toc-section-number">6.8.1</span> EWG Review, 2023 June,
Varna<span></span></a></li>
</ul></li>
<li><a href="#D.9" id="toc-D.9"><span class="toc-section-number">6.9</span> Literal operator function
declarations using an identifier [depr.lit]<span></span></a>
<ul>
<li><a href="#ewg-review-2023-june-varna-7" id="toc-ewg-review-2023-june-varna-7"><span class="toc-section-number">6.9.1</span> EWG Review, 2023 June,
Varna<span></span></a></li>
</ul></li>
<li><a href="#D.10" id="toc-D.10"><span class="toc-section-number">6.10</span>
<code class="sourceCode default">template</code> keyword before
qualified names [depr.template.template]<span></span></a>
<ul>
<li><a href="#ewg-review-2023-june-varna-8" id="toc-ewg-review-2023-june-varna-8"><span class="toc-section-number">6.10.1</span> EWG Review, 2023 June,
Varna<span></span></a></li>
</ul></li>
<li><a href="#requires-paragraph-depr.res.on.required" id="toc-requires-paragraph-depr.res.on.required"><span class="toc-section-number">6.11</span> Requires paragraph <span id="D.11">depr.res.on.required</span><span></span></a>
<ul>
<li><a href="#ewg-review-2023-june-varna-9" id="toc-ewg-review-2023-june-varna-9"><span class="toc-section-number">6.11.1</span> EWG Review, 2023 June,
Varna<span></span></a></li>
<li><a href="#mailing-october-2023-2" id="toc-mailing-october-2023-2"><span class="toc-section-number">6.11.2</span> Mailing, October
2023<span></span></a></li>
</ul></li>
<li><a href="#D.12" id="toc-D.12"><span class="toc-section-number">6.12</span>
<code class="sourceCode default">has_denorm</code> members in
<code class="sourceCode default">numeric_limits</code>
[depr.numeric.limits.has.denorm]<span></span></a>
<ul>
<li><a href="#initial-lewg-review-kona-20231107" id="toc-initial-lewg-review-kona-20231107"><span class="toc-section-number">6.12.1</span> Initial LEWG Review: Kona,
2023/11/07<span></span></a></li>
</ul></li>
<li><a href="#D.13" id="toc-D.13"><span class="toc-section-number">6.13</span> Deprecated C macros
[depr.c.macros]<span></span></a>
<ul>
<li><a href="#initial-lewg-review-kona-20231107-1" id="toc-initial-lewg-review-kona-20231107-1"><span class="toc-section-number">6.13.1</span> Initial LEWG Review: Kona,
2023/11/07<span></span></a></li>
</ul></li>
<li><a href="#D.14" id="toc-D.14"><span class="toc-section-number">6.14</span> Relational operators
[depr.relops]<span></span></a></li>
<li><a href="#D.15" id="toc-D.15"><span class="toc-section-number">6.15</span>
<code class="sourceCode default">char *</code> streams
[depr.str.strstreams]<span></span></a>
<ul>
<li><a href="#lewg-reflector-review-20231002-20231009" id="toc-lewg-reflector-review-20231002-20231009"><span class="toc-section-number">6.15.1</span> LEWG Reflector Review :
2023/10/02 – 2023/10/09<span></span></a></li>
<li><a href="#lewg-electronic-poll-20231220-20230110" id="toc-lewg-electronic-poll-20231220-20230110"><span class="toc-section-number">6.15.2</span> LEWG electronic poll :
2023/12/20 – 2023/01/10<span></span></a></li>
</ul></li>
<li><a href="#D.16" id="toc-D.16"><span class="toc-section-number">6.16</span> Deprecated error numbers
[depr.cerrno]<span></span></a>
<ul>
<li><a href="#initial-lewg-review-kona-20231107-2" id="toc-initial-lewg-review-kona-20231107-2"><span class="toc-section-number">6.16.1</span> Initial LEWG Review: Kona,
2023/11/07<span></span></a></li>
</ul></li>
<li><a href="#D.17" id="toc-D.17"><span class="toc-section-number">6.17</span> The default allocator
[depr.default.allocator]<span></span></a>
<ul>
<li><a href="#lewg-reflector-review-20230725-20230802" id="toc-lewg-reflector-review-20230725-20230802"><span class="toc-section-number">6.17.1</span> LEWG Reflector Review :
2023/07/25 – 2023/08/02<span></span></a></li>
<li><a href="#lewg-electronic-poll-20230921-20231010" id="toc-lewg-electronic-poll-20230921-20231010"><span class="toc-section-number">6.17.2</span> LEWG electronic poll :
2023/09/21 – 2023/10/10<span></span></a></li>
<li><a href="#mailing-december-2023-1" id="toc-mailing-december-2023-1"><span class="toc-section-number">6.17.3</span> Mailing, December
2023<span></span></a></li>
</ul></li>
<li><a href="#D.18" id="toc-D.18"><span class="toc-section-number">6.18</span> Deprecated
<code class="sourceCode default">polymorphic_allocator</code> member
function [depr.mem.poly.allocator.mem]<span></span></a>
<ul>
<li><a href="#lewg-reflector-review-july-2023" id="toc-lewg-reflector-review-july-2023"><span class="toc-section-number">6.18.1</span> LEWG Reflector Review : July
2023<span></span></a></li>
</ul></li>
<li><a href="#D.19" id="toc-D.19"><span class="toc-section-number">6.19</span> Deprecated type traits
[depr.meta.types]<span></span></a>
<ul>
<li><a href="#deployment" id="toc-deployment"><span class="toc-section-number">6.19.1</span>
Deployment<span></span></a></li>
<li><a href="#initial-lewg-review-kona-20231107-3" id="toc-initial-lewg-review-kona-20231107-3"><span class="toc-section-number">6.19.2</span> Initial LEWG Review: Kona,
2023/11/07<span></span></a></li>
</ul></li>
<li><a href="#D.20" id="toc-D.20"><span class="toc-section-number">6.20</span> Tuple
[depr.tuple]<span></span></a>
<ul>
<li><a href="#initial-lewg-review-kona-20231107-4" id="toc-initial-lewg-review-kona-20231107-4"><span class="toc-section-number">6.20.1</span> Initial LEWG Review: Kona,
2023/11/07<span></span></a></li>
<li><a href="#lewg-electronic-poll-20231220-20230110-1" id="toc-lewg-electronic-poll-20231220-20230110-1"><span class="toc-section-number">6.20.2</span> LEWG electronic poll :
2023/12/20 – 2023/01/10<span></span></a></li>
</ul></li>
<li><a href="#D.21" id="toc-D.21"><span class="toc-section-number">6.21</span> Variant
[depr.variant]<span></span></a>
<ul>
<li><a href="#initial-lewg-review-kona-20231107-5" id="toc-initial-lewg-review-kona-20231107-5"><span class="toc-section-number">6.21.1</span> Initial LEWG Review: Kona,
2023/11/07<span></span></a></li>
<li><a href="#lewg-electronic-poll-20231220-20230110-2" id="toc-lewg-electronic-poll-20231220-20230110-2"><span class="toc-section-number">6.21.2</span> LEWG electronic poll :
2023/12/20 – 2023/01/10<span></span></a></li>
</ul></li>
<li><a href="#D.22" id="toc-D.22"><span class="toc-section-number">6.22</span> Deprecated
<code class="sourceCode default">iterator</code> class template
[depr.iterator]<span></span></a>
<ul>
<li><a href="#initial-review-telecon-20200713" id="toc-initial-review-telecon-20200713"><span class="toc-section-number">6.22.1</span> Initial Review: telecon
2020/07/13<span></span></a></li>
</ul></li>
<li><a href="#D.23" id="toc-D.23"><span class="toc-section-number">6.23</span> Deprecated
<code class="sourceCode default">move_iterator</code> access
[depr.move.iter.elem]<span></span></a>
<ul>
<li><a href="#initial-lewg-review-kona-20231107-6" id="toc-initial-lewg-review-kona-20231107-6"><span class="toc-section-number">6.23.1</span> Initial LEWG Review: Kona,
2023/11/07<span></span></a></li>
</ul></li>
<li><a href="#D.24" id="toc-D.24"><span class="toc-section-number">6.24</span> Deprecated
<code class="sourceCode default">shared_ptr</code> atomic access
[depr.util.smartptr.shared.atomic]<span></span></a>
<ul>
<li><a href="#sg1-concurrency-review-2023-june-varna" id="toc-sg1-concurrency-review-2023-june-varna"><span class="toc-section-number">6.24.1</span> SG1 (concurrency) Review, 2023
June, Varna<span></span></a></li>
<li><a href="#initial-lewg-review-kona-20231107-7" id="toc-initial-lewg-review-kona-20231107-7"><span class="toc-section-number">6.24.2</span> Initial LEWG Review: Kona,
2023/11/07<span></span></a></li>
<li><a href="#lewg-electronic-poll-20231220-20230110-3" id="toc-lewg-electronic-poll-20231220-20230110-3"><span class="toc-section-number">6.24.3</span> LEWG electronic poll :
2023/12/20 – 2023/01/10<span></span></a></li>
</ul></li>
<li><a href="#D.25" id="toc-D.25"><span class="toc-section-number">6.25</span> Deprecated
<code class="sourceCode default">basic_string</code> capacity
[depr.string.capacity]<span></span></a>
<ul>
<li><a href="#lewg-reflector-review-20230626-20230702" id="toc-lewg-reflector-review-20230626-20230702"><span class="toc-section-number">6.25.1</span> LEWG Reflector Review :
2023/06/26 – 2023/07/02<span></span></a></li>
<li><a href="#lewg-electronic-poll-20230921-20231010-1" id="toc-lewg-electronic-poll-20230921-20231010-1"><span class="toc-section-number">6.25.2</span> LEWG electronic poll :
2023/09/21 – 2023/10/10<span></span></a></li>
<li><a href="#mailing-december-2023-2" id="toc-mailing-december-2023-2"><span class="toc-section-number">6.25.3</span> Mailing, December
2023<span></span></a></li>
</ul></li>
<li><a href="#D.26" id="toc-D.26"><span class="toc-section-number">6.26</span> Deprecated standard code
conversion facets [depr.locale.stdcvt]<span></span></a>
<ul>
<li><a href="#c26-review-by-sg16-telecon-20230524" id="toc-c26-review-by-sg16-telecon-20230524"><span class="toc-section-number">6.26.1</span> C++26 Review by SG16: telecon
2023/05/24<span></span></a></li>
<li><a href="#lewg-reflector-review-20230814-20230915" id="toc-lewg-reflector-review-20230814-20230915"><span class="toc-section-number">6.26.2</span> LEWG Reflector Review :
2023/08/14 – 2023/09/15<span></span></a></li>
<li><a href="#lewg-electronic-poll-20230921-20231010-2" id="toc-lewg-electronic-poll-20230921-20231010-2"><span class="toc-section-number">6.26.3</span> LEWG electronic poll :
2023/09/21 – 2023/10/10<span></span></a></li>
<li><a href="#mailing-december-2023-3" id="toc-mailing-december-2023-3"><span class="toc-section-number">6.26.4</span> Mailing, December
2023<span></span></a></li>
</ul></li>
<li><a href="#D.27" id="toc-D.27"><span class="toc-section-number">6.27</span> Deprecated convenience conversion
interfaces [depr.conversions]<span></span></a>
<ul>
<li><a href="#c26-review-by-sg16-telecon-20230524-1" id="toc-c26-review-by-sg16-telecon-20230524-1"><span class="toc-section-number">6.27.1</span> C++26 Review by SG16: telecon
2023/05/24<span></span></a></li>
</ul></li>
<li><a href="#D.28" id="toc-D.28"><span class="toc-section-number">6.28</span> Deprecated locale category facets
[depr.locale.category]<span></span></a>
<ul>
<li><a href="#c26-review-by-sg16-telecon-20230524-2" id="toc-c26-review-by-sg16-telecon-20230524-2"><span class="toc-section-number">6.28.1</span> C++26 Review by SG16: telecon
2023/05/24<span></span></a></li>
</ul></li>
<li><a href="#D.29" id="toc-D.29"><span class="toc-section-number">6.29</span> Deprecated filesystem path
factory functions [depr.fs.path.factory]<span></span></a>
<ul>
<li><a href="#c23-review-for-reference" id="toc-c23-review-for-reference"><span class="toc-section-number">6.29.1</span> C++23 Review for
reference<span></span></a></li>
<li><a href="#lewg-telecon-review-20230110-before-r0-of-this-paper" id="toc-lewg-telecon-review-20230110-before-r0-of-this-paper"><span class="toc-section-number">6.29.2</span> LEWG telecon Review: 2023/01/10
(before R0 of this paper)<span></span></a></li>
<li><a href="#c26-review-by-sg16-telecon-20230524-3" id="toc-c26-review-by-sg16-telecon-20230524-3"><span class="toc-section-number">6.29.3</span> C++26 Review by SG16: telecon
2023/05/24<span></span></a></li>
<li><a href="#initial-lewg-review-kona-20231107-8" id="toc-initial-lewg-review-kona-20231107-8"><span class="toc-section-number">6.29.4</span> Initial LEWG Review: Kona,
2023/11/07<span></span></a></li>
</ul></li>
<li><a href="#D.30" id="toc-D.30"><span class="toc-section-number">6.30</span> Deprecated atomic operations
[depr.atomics]<span></span></a>
<ul>
<li><a href="#initial-lewg-review-kona-20231107-9" id="toc-initial-lewg-review-kona-20231107-9"><span class="toc-section-number">6.30.1</span> Initial LEWG Review: Kona,
2023/11/07<span></span></a></li>
<li><a href="#lewg-electronic-poll-20231220-20230110-4" id="toc-lewg-electronic-poll-20231220-20230110-4"><span class="toc-section-number">6.30.2</span> LEWG electronic poll :
2023/12/20 – 2023/01/10<span></span></a></li>
</ul></li>
</ul></li>
<li><a href="#ack" id="toc-ack"><span class="toc-section-number">7</span>
Acknowledgements<span></span></a></li>
<li><a href="#bibliography" id="toc-bibliography"><span class="toc-section-number">8</span> References<span></span></a></li>
</ul>
</div>
<!-- RENDERING:
     This paper should be rendered as html, rather than pdf, due to poor
     formatting of the main table in the generated LaTeX.

     Also, the column widths of the html tables deduce badly after translation
     from markdown, and should be manually patched before publishing the final
     paper.
-->
<h1 data-number="1" id="abstract"><span class="header-section-number">1</span> Abstract<a href="#abstract" class="self-link"></a></h1>
<p>This paper evaluates all the deprecated facilities of the C++23
Standard and recommends removing a subset from Annex D in C++26, either
by removal from the Standard entirely or by undeprecation and restoring
the subset to the main text. Such recommendations will be pursued in
specific papers, and this paper acts as an index into that work.</p>
<h1 data-number="2" id="revisions"><span class="header-section-number">2</span> Revision History<a href="#revisions" class="self-link"></a></h1>
<!-- Outstanding work
### R5: February 2024   (pre-Tokyo mailing)     {-}

PREP FOR PROGRESS TRACK, REMOVED ALL COMPLETED PROJECTS

* Updated status of tracked papers following reviews and polls
  - P2865: SG22 ->
  - P2866: POLL ->
  - P2867: POLL ->
  - P2869: POLL ->
  - P2872: POLL ->
  - P2873: SG16 ->
  - P2875: POLL ->
  - P3047: LEWG ->
  - P2863: (confirm no action)
    - D.22: LEWG ->
    - D.29: SG16 ->

  -->
<h3 class="unnumbered" id="r4-february-2024-midterm-mailing">R4:
February 2024 (midterm mailing)<a href="#r4-february-2024-midterm-mailing" class="self-link"></a></h3>
<!-- Outstanding work
  Update all reviews under text for each entry
  Wait for results of [@P3054R0] --- [@P]
  -->
<ul>
<li>Verified all reviews from the Kona 2023 meeting are recorded</li>
<li>Confirmed completed status (DONE) for all papers that landed in
working draft N4971</li>
<li>Updated results from the December LEWG electronic polling, <span class="citation" data-cites="P3054R0">[<a href="#ref-P3054R0" role="doc-biblioref">P3054R0</a>]</span></li>
<li>Updated status of tracked papers following reviews and polls
<ul>
<li>P2864: WP -&gt; DONE</li>
<li>P2865: SG22</li>
<li>P2866: POLL -&gt; CORE/LWG</li>
<li>P2867: POLL -&gt; LWG</li>
<li>P2868: WP -&gt; DONE</li>
<li>P2869: POLL -&gt; LWG</li>
<li>P2870: WP -&gt; DONE</li>
<li>P2871: WP -&gt; DONE</li>
<li>P2872: LEWG -&gt; POLL</li>
<li>P2873: SG16</li>
<li>P2875: LEWG -&gt; POLL</li>
<li>P3047: LEWG (new paper)</li>
<li>P2863: (confirm no action)
<ul>
<li>D.22: LEWG</li>
<li>D.29: SG16</li>
</ul></li>
</ul></li>
</ul>
<h3 class="unnumbered" id="r3-december-2023-post-kona">R3: December 2023
(post-Kona)<a href="#r3-december-2023-post-kona" class="self-link"></a></h3>
<ul>
<li>Tentatively completed EWG review process</li>
<li>Reengaged SG16 review process</li>
<li>Remove dated revision when tracking papers still making
progress</li>
<li>Cite dated revision for papers that pass a plenary poll</li>
<li>Updated status of tracked papers following reviews and polls
<ul>
<li>P2864: DONE -&gt; EWG -&gt; CORE -&gt; WP</li>
<li>P2865: CORE -&gt; EWG -&gt; SG22</li>
<li>P2866: LEWG -&gt; POLL</li>
<li>P2867: LEWG -&gt; POLL</li>
<li>P2868: POLL -&gt; LWG -&gt; WP</li>
<li>P2869: LEWG -&gt; POLL</li>
<li>P2870: POLL -&gt; LWG -&gt; WP</li>
<li>P2871: POLL -&gt; LWG -&gt; WP</li>
<li>P2872: No progress</li>
<li>P2873: LEWG -&gt; SG16</li>
<li>P2875: No progress</li>
<li>P2984: EWG -&gt; DONE</li>
<li>P3047: LEWG (pending new paper)</li>
<li>P2863: (confirm no action)
<ul>
<li>D.6 : EWG -&gt; P2984R0 -&gt; DONE</li>
<li>D.12: LEWG -&gt; DONE</li>
<li>D.13: LEWG -&gt; DONE</li>
<li>D.14: LEWG -&gt; LEWG (Paper requested)</li>
<li>D.16: LEWG -&gt; DONE</li>
<li>D.19: LEWG -&gt; DONE</li>
<li>D.22: Skipped by mistake</li>
<li>D.23: Defer to <span class="citation" data-cites="P3039R0">[<a href="#ref-P3039R0" role="doc-biblioref">P3039R0</a>]</span> by David
Stone</li>
<li>D.29: LEWG -&gt; SG16</li>
</ul></li>
</ul></li>
</ul>
<h3 class="unnumbered" id="r2-october-2023-pre-kona">R2: October 2023
(pre-Kona)<a href="#r2-october-2023-pre-kona" class="self-link"></a></h3>
<ul>
<li>Added revision numbers to the revision history</li>
<li>Updated revision numbers of papers being tracked for progress</li>
<li>Updated status of tracked papers
<ul>
<li>P2865: EWG -&gt; CORE</li>
<li>P2871: LEWG -&gt; POLL</li>
<li>P2874: WP -&gt; DONE</li>
<li>P2984: EWG -&gt; EWG (new paper)</li>
</ul></li>
</ul>
<h3 class="unnumbered" id="r1-august-2023-post-varna-update">R1: August
2023 (post-Varna update)<a href="#r1-august-2023-post-varna-update" class="self-link"></a></h3>
<ul>
<li>Completed SG1 review process</li>
<li>Completed SG16 review process</li>
<li>Completed initial EWG review process</li>
<li>Completed initial LWG review process</li>
<li>Provided a clearer rationale for taking no action on D.29</li>
<li>Fixed links to Core and LWG issues</li>
<li>Updated C++23 reference doc to <span class="citation" data-cites="N4950">[<a href="#ref-N4950" role="doc-biblioref">N4950</a>]</span></li>
<li>Added new progress states:
<ul>
<li>POLL : LEWG Electronic polling</li>
<li>WG21 : Ready for a plenary poll</li>
<li>WP : Approved for WP, not yet published</li>
<li>DONE : All anticipated committee work complete</li>
</ul></li>
<li>Updated status of tracked papers following initial reviews
<ul>
<li>P2864: EWG -&gt; DONE, no action</li>
<li>P2865: EWG -&gt; CORE -&gt; EWG</li>
<li>P2866: SG1 -&gt; LEWG, EWG -&gt; LEWG</li>
<li>P2867: Not reviewed</li>
<li>P2868: LEWG -&gt; POLL</li>
<li>P2869: SG1 -&gt; LEWG</li>
<li>P2870: LEWG -&gt; POLL</li>
<li>P2871: SG16 -&gt; LEWG</li>
<li>P2872: LEWG -&gt; SG16 -&gt; LEWG</li>
<li>P2873: SG16 -&gt; LEWG</li>
<li>P2874: LWG -&gt; WG21 -&gt; WP</li>
<li>P2875: LEWG -&gt; LEWG (requested update)</li>
<li>P2863: (confirm no action)
<ul>
<li>D.3 : EWG -&gt; DONE, no action</li>
<li>D.6 : EWG -&gt; EWG, request paper to undeprecate</li>
<li>D.7 : EWG -&gt; DONE, no action</li>
<li>D.8 : EWG -&gt; DONE, no action</li>
<li>D.9 : EWG -&gt; DONE, no action</li>
<li>D.10: EWG -&gt; DONE, no action</li>
<li>D.12: Not reviewed</li>
<li>D.13: Not reviewed</li>
<li>D.14: Not reviewed</li>
<li>D.16: Not reviewed</li>
<li>D.19: Not reviewed</li>
<li>D.22: Not reviewed</li>
<li>D.23: Not reviewed</li>
<li>D.29: SG16 -&gt; LEWG</li>
</ul></li>
</ul></li>
</ul>
<h3 class="unnumbered" id="r0-may-2023-pre-varna-mailing">R0: May 2023
(pre-Varna mailing)<a href="#r0-may-2023-pre-varna-mailing" class="self-link"></a></h3>
<ul>
<li>Initial draft of this paper.</li>
</ul>
<h1 data-number="3" id="outline"><span class="header-section-number">3</span> Outline<a href="#outline" class="self-link"></a></h1>
<p>With the release of a new C++ Standard, we get an opportunity to
revisit the features identified for deprecation, and consider if we are
prepared to clear any out yet, either by removing completely from the
standard, or by reversing the deprecation decision and restoring the
feature to full service. This paper makes no attempt to offer proposals
for removing features other than those deprecated in Annex D, nor does
it attempt to identify new candidates for deprecation.</p>
<p>In an ideal world, the start of every release cycle would cleanse the
list of deprecated features entirely, allowing the language and library
to evolve cleanly without holding too much dead-weight. It should be
noted that only two of the current twenty-nine deprecated feature were
deprecated prior to C++17, as we have made good progress are resolving
long-standing deprecations. However, the desire to support customers and
not needlessly break their code makes a full clear-out impractical. This
paper continues the tradition of maintaining a single paper to focus
attention of efficiently reviewing the case for and against removal, or
undeprecation, of each deprecated feature of the just-published
standard, the meeting after that standard has been sent to ISO for the
final publication ballot.</p>
<p>In contrast to previous years, all work to change the status of a
feature, by removal or undeprecation, will be delegated to a paper on
that feature. Thus, work proceeds on each feature without delaying
everything to the pace of the slowest feature and the author’s ability
to update this summary paper in a timely manner. Note that many reviews
will still be processed by this paper, where no further action is
intended on a feature for C++26.</p>
<p>The benefits of making the choice to remove features early in a
standard cycle is that we will get the most experience we can from the
bleeding-edge adopters whether a particular removal is more problematic
than expected - but even this data point is limited, as bleeding-edge
adopters typically have less reliance on deprecated features, eagerly
adopting the newer replacement facilities.</p>
<p>However, do note that with the three year release cadence for the C++
Standard, we will often be re-evaluating features whose deprecated
status has barely reached print.</p>
<p>We have precedent that Core language features are good targets for
removal, typically taking two standard cycles to remove a deprecated
feature, although often prepared to entirely remove a feature even
without a period of deprecation, if the cause is strong enough.</p>
<p>The library experience has been mixed, with no desire to remove
anything without a period of deprecation (other than
<code class="sourceCode default">gets</code>) and no precedent prior to
C++17 for actually removing deprecated features.</p>
<p>Informal feedback on library deprecation when performing these
reviews for previous standards leans in two directions: deprecation is
for life, and we should never remove anything, as there is no reason for
the library to ever break client code; and alternatively with the
addition of zombie names there is clear intent library vendors should
continue supporting deprecated features as long as their customers
demand them, without violating conformance, and that removal from the
standard removes maintenance costs from wg21 (placed instead on library
vendors) and that this paper should be aggressive in its recommendations
to remove deprecated features.</p>
<h1 data-number="4" id="methodology"><span class="header-section-number">4</span> Methodology<a href="#methodology" class="self-link"></a></h1>
<p>We will review each deprecated facility, and make a recommendation to
either remove that feature, undeprecate that feature, or take no action.
A recommendation to remove or undeprecate will delegate that work to a
follow-up paper, tracked by a checklist below. The author provides
several papers that do just that for features where the abandoned review
for C++23 had expressed a strong intent to remove. In other cases
“Request Paper” is indicated, which would be the result of evolution
review wanting to proceed with undeprecation or removal that the current
author does not have the resources to pursue.</p>
<h1 data-number="5" id="checklists"><span class="header-section-number">5</span> Checklist For Recommendations<a href="#checklists" class="self-link"></a></h1>
<!-- Note link to **C++23** draft N4950, do not "fix" this link -->
<p>This table will track progress of all papers targeting features
deprecated in the C++23 Standard, according to the last public draft,
<span class="citation" data-cites="N4950">[<a href="#ref-N4950" role="doc-biblioref">N4950</a>]</span>. As such, the subclause
references will not update if new deprecations occur during C++26, as we
track only the features deprecated in the current published
standard.</p>
<p>It notes the standard that introduced the feature; the standard and
paper that deprecated that feature; the current recommendation of action
to take, with a reference to the delegated paper that will propose those
changes; and the current working group that has ownership of that
review. Any recommendation of “No action” means the review is in this
paper.</p>
<p>Once the review of a feature is completed, either by confirming No
action or adopting a reviewed paper in plenary, the Owner will change to
Done.</p>
<h2 data-number="5.1" id="checklists.core"><span class="header-section-number">5.1</span> Core<a href="#checklists.core" class="self-link"></a></h2>
<table>
<colgroup>
<col style="width: 14%" />
<col style="width: 11%" />
<col style="width: 15%" />
<col style="width: 15%" />
<col style="width: 12%" />
<col style="width: 22%" />
<col style="width: 7%" />
</colgroup>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>Subclause</strong>
</div></th>
<th><div style="text-align:center">
<strong>Feature</strong>
</div></th>
<th><div style="text-align:center">
<strong>Introduced</strong>
</div></th>
<th><div style="text-align:center">
<strong>Deprecated</strong>
</div></th>
<th><div style="text-align:center">
<strong>By Paper</strong>
</div></th>
<th><div style="text-align:center">
<strong>Recommendation</strong>
</div></th>
<th><div style="text-align:center">
<strong>Owner</strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><a href="#D.2">D.2</a></td>
<td>Arithmetic conversion on enumerations</td>
<td>C++98</td>
<td>C++20</td>
<td><span class="citation" data-cites="P1120R0">[<a href="#ref-P1120R0" role="doc-biblioref">P1120R0</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P2864R2">[<a href="#ref-P2864R2" role="doc-biblioref">P2864R2</a>]</span></td>
<td>DONE</td>
</tr>
<tr class="even">
<td><a href="#D.3">D.3</a></td>
<td>Implicit capture of <code class="sourceCode default">*this</code> by
reference</td>
<td>C++11</td>
<td>C++20</td>
<td><span class="citation" data-cites="P0806R2">[<a href="#ref-P0806R2" role="doc-biblioref">P0806R2</a>]</span></td>
<td>No action</td>
<td>DONE</td>
</tr>
<tr class="odd">
<td><a href="#D.4">D.4</a></td>
<td>Array comparisons</td>
<td>C++98</td>
<td>C++20</td>
<td><span class="citation" data-cites="P1120R0">[<a href="#ref-P1120R0" role="doc-biblioref">P1120R0</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P2865">[<a href="#ref-P2865" role="doc-biblioref">P2865</a>]</span></td>
<td>SG22</td>
</tr>
<tr class="even">
<td><a href="#D.5">D.5</a></td>
<td>Deprecated use of
<code class="sourceCode default">volatile</code></td>
<td>C++98</td>
<td>C++20</td>
<td><span class="citation" data-cites="P1152R4">[<a href="#ref-P1152R4" role="doc-biblioref">P1152R4</a>]</span></td>
<td>Address by <span class="citation" data-cites="P2866">[<a href="#ref-P2866" role="doc-biblioref">P2866</a>]</span></td>
<td>CORE</td>
</tr>
<tr class="odd">
<td><a href="#D.6">D.6</a></td>
<td>Redeclare static <code class="sourceCode default">constexpr</code>
members</td>
<td>C++11</td>
<td>C++17</td>
<td><span class="citation" data-cites="P0386R2">[<a href="#ref-P0386R2" role="doc-biblioref">P0386R2</a>]</span></td>
<td>No action</td>
<td>DONE</td>
</tr>
<tr class="even">
<td><a href="#D.7">D.7</a></td>
<td>Non-local use of TU-local entities</td>
<td>C++98</td>
<td>C++20</td>
<td><span class="citation" data-cites="P1815R2">[<a href="#ref-P1815R2" role="doc-biblioref">P1815R2</a>]</span></td>
<td>No action</td>
<td>DONE</td>
</tr>
<tr class="odd">
<td><a href="#D.8">D.8</a></td>
<td>Implicit special members</td>
<td>C++98</td>
<td>C++11</td>
<td><span class="citation" data-cites="N3203">[<a href="#ref-N3203" role="doc-biblioref">N3203</a>]</span></td>
<td>No action</td>
<td>DONE</td>
</tr>
<tr class="even">
<td><a href="#D.9">D.9</a></td>
<td>Some literal operator declarations</td>
<td>C++11</td>
<td>C++23</td>
<td><span class="citation" data-cites="CWG2521">[<a href="#ref-CWG2521" role="doc-biblioref">CWG2521</a>]</span></td>
<td>No action</td>
<td>DONE</td>
</tr>
<tr class="odd">
<td><a href="#D.10">D.10</a></td>
<td><code class="sourceCode default">template</code> keyword before
qualified names</td>
<td>C++98</td>
<td>C++23</td>
<td><span class="citation" data-cites="P1787R6">[<a href="#ref-P1787R6" role="doc-biblioref">P1787R6</a>]</span></td>
<td>No action</td>
<td>DONE</td>
</tr>
</tbody>
</table>
<h2 data-number="5.2" id="checklists.library"><span class="header-section-number">5.2</span> Library<a href="#checklists.library" class="self-link"></a></h2>
<table>
<colgroup>
<col style="width: 14%" />
<col style="width: 11%" />
<col style="width: 15%" />
<col style="width: 15%" />
<col style="width: 12%" />
<col style="width: 22%" />
<col style="width: 7%" />
</colgroup>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>Subclause</strong>
</div></th>
<th><div style="text-align:center">
<strong>Feature</strong>
</div></th>
<th><div style="text-align:center">
<strong>Introduced</strong>
</div></th>
<th><div style="text-align:center">
<strong>Deprecated</strong>
</div></th>
<th><div style="text-align:center">
<strong>By Paper</strong>
</div></th>
<th><div style="text-align:center">
<strong>Recommendation</strong>
</div></th>
<th><div style="text-align:center">
<strong>Owner</strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><a href="#D.11">D.11</a></td>
<td><em>Requires:</em> clauses</td>
<td>C++98</td>
<td>C++20</td>
<td>Editorial</td>
<td>Remove: <span class="citation" data-cites="P2874R1">[<a href="#ref-P2874R1" role="doc-biblioref">P2874R1</a>]</span></td>
<td>DONE</td>
</tr>
<tr class="even">
<td><a href="#D.12">D.12</a></td>
<td><code class="sourceCode default">has_denorm</code> members in
<code class="sourceCode default">numeric_limits</code></td>
<td>C++98</td>
<td>C++23</td>
<td><span class="citation" data-cites="P2614R2">[<a href="#ref-P2614R2" role="doc-biblioref">P2614R2</a>]</span></td>
<td>No action</td>
<td>DONE</td>
</tr>
<tr class="odd">
<td><a href="#D.13">D.13</a></td>
<td>Deprecated C macros</td>
<td>C++98</td>
<td>C++23</td>
<td><span class="citation" data-cites="P2790R0">[<a href="#ref-P2790R0" role="doc-biblioref">P2790R0</a>]</span></td>
<td>Defer to rebase on C23</td>
<td>DONE</td>
</tr>
<tr class="even">
<td><a href="#D.14">D.14</a></td>
<td><code class="sourceCode default">relops</code></td>
<td>C++98</td>
<td>C++20</td>
<td><span class="citation" data-cites="P0768R1">[<a href="#ref-P0768R1" role="doc-biblioref">P0768R1</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P3047">[<a href="#ref-P3047" role="doc-biblioref">P3047</a>]</span></td>
<td>LEWG</td>
</tr>
<tr class="odd">
<td><a href="#D.15">D.15</a></td>
<td><code class="sourceCode default">char *</code> streams</td>
<td>C++98</td>
<td>C++98</td>
<td>N/A</td>
<td>Remove: <span class="citation" data-cites="P2867">[<a href="#ref-P2867" role="doc-biblioref">P2867</a>]</span></td>
<td>LWG</td>
</tr>
<tr class="even">
<td><a href="#D.16">D.16</a></td>
<td>Deprecated error numbers</td>
<td>C++11</td>
<td>C++23</td>
<td><span class="citation" data-cites="P2790R0">[<a href="#ref-P2790R0" role="doc-biblioref">P2790R0</a>]</span></td>
<td>No action</td>
<td>DONE</td>
</tr>
<tr class="odd">
<td><a href="#D.17">D.17</a></td>
<td>The default allocator</td>
<td>C++17</td>
<td>C++23</td>
<td><span class="citation" data-cites="LWG3170">[<a href="#ref-LWG3170" role="doc-biblioref">LWG3170</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P2868R3">[<a href="#ref-P2868R3" role="doc-biblioref">P2868R3</a>]</span></td>
<td>DONE</td>
</tr>
<tr class="even">
<td><a href="#D.18">D.18</a></td>
<td><code class="sourceCode default">polymorphic_allocator::destroy</code></td>
<td>C++17</td>
<td>C++23</td>
<td><span class="citation" data-cites="LWG3036">[<a href="#ref-LWG3036" role="doc-biblioref">LWG3036</a>]</span></td>
<td>Undeprecate: <span class="citation" data-cites="P2875">[<a href="#ref-P2875" role="doc-biblioref">P2875</a>]</span></td>
<td>POLL</td>
</tr>
<tr class="odd">
<td><a href="#D.19">D.19</a></td>
<td>Deprecated type traits</td>
<td>C++11</td>
<td>C++20</td>
<td><span class="citation" data-cites="P0767R1">[<a href="#ref-P0767R1" role="doc-biblioref">P0767R1</a>]</span></td>
<td>No Action</td>
<td>DONE</td>
</tr>
<tr class="even">
<td></td>
<td></td>
<td>C++11</td>
<td>C++23</td>
<td><span class="citation" data-cites="P1413R3">[<a href="#ref-P1413R3" role="doc-biblioref">P1413R3</a>]</span></td>
<td></td>
<td></td>
</tr>
<tr class="odd">
<td><a href="#D.20">D.20</a></td>
<td><code class="sourceCode default">volatile</code> tuple API</td>
<td>C++11</td>
<td>C++20</td>
<td><span class="citation" data-cites="P1831R1">[<a href="#ref-P1831R1" role="doc-biblioref">P1831R1</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P2866">[<a href="#ref-P2866" role="doc-biblioref">P2866</a>]</span></td>
<td>LWG</td>
</tr>
<tr class="even">
<td><a href="#D.21">D.21</a></td>
<td><code class="sourceCode default">volatile</code> variant API</td>
<td>C++17</td>
<td>C++20</td>
<td><span class="citation" data-cites="P1831R1">[<a href="#ref-P1831R1" role="doc-biblioref">P1831R1</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P2866">[<a href="#ref-P2866" role="doc-biblioref">P2866</a>]</span></td>
<td>LWG</td>
</tr>
<tr class="odd">
<td><a href="#D.22">D.22</a></td>
<td><code class="sourceCode default">std::iterator</code></td>
<td>C++98</td>
<td>C++17</td>
<td><span class="citation" data-cites="P0174R2">[<a href="#ref-P0174R2" role="doc-biblioref">P0174R2</a>]</span></td>
<td>No action</td>
<td>LEWG</td>
</tr>
<tr class="even">
<td><a href="#D.23">D.23</a></td>
<td><code class="sourceCode default">move_iterator::operator-&gt;</code></td>
<td>C++11</td>
<td>C++20</td>
<td><span class="citation" data-cites="P1252R2">[<a href="#ref-P1252R2" role="doc-biblioref">P1252R2</a>]</span></td>
<td>Defer to <span class="citation" data-cites="P3039R0">[<a href="#ref-P3039R0" role="doc-biblioref">P3039R0</a>]</span></td>
<td>DONE</td>
</tr>
<tr class="odd">
<td><a href="#D.24">D.24</a></td>
<td>C API to use <code class="sourceCode default">shared_ptr</code>
atomically</td>
<td>C++11</td>
<td>C++20</td>
<td><span class="citation" data-cites="P0718R2">[<a href="#ref-P0718R2" role="doc-biblioref">P0718R2</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P2869">[<a href="#ref-P2869" role="doc-biblioref">P2869</a>]</span></td>
<td>LWG</td>
</tr>
<tr class="even">
<td><a href="#D.25">D.25</a></td>
<td><code class="sourceCode default">basic_string::reserve()</code></td>
<td>C++98</td>
<td>C++20</td>
<td><span class="citation" data-cites="P0966R1">[<a href="#ref-P0966R1" role="doc-biblioref">P0966R1</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P2870R3">[<a href="#ref-P2870R3" role="doc-biblioref">P2870R3</a>]</span></td>
<td>DONE</td>
</tr>
<tr class="odd">
<td><a href="#D.26">D.26</a></td>
<td><code class="sourceCode default">&lt;codecvt&gt;</code></td>
<td>C++11</td>
<td>C++17</td>
<td><span class="citation" data-cites="P0618R0">[<a href="#ref-P0618R0" role="doc-biblioref">P0618R0</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P2871R3">[<a href="#ref-P2871R3" role="doc-biblioref">P2871R3</a>]</span></td>
<td>DONE</td>
</tr>
<tr class="even">
<td><a href="#D.27">D.27</a></td>
<td><code class="sourceCode default">wstring_convert</code> et al.</td>
<td>C++11</td>
<td>C++17</td>
<td><span class="citation" data-cites="P0618R0">[<a href="#ref-P0618R0" role="doc-biblioref">P0618R0</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P2872">[<a href="#ref-P2872" role="doc-biblioref">P2872</a>]</span></td>
<td>POLL</td>
</tr>
<tr class="odd">
<td><a href="#D.28">D.28</a></td>
<td>Deprecated locale category facets</td>
<td>C++11</td>
<td>C++20</td>
<td><span class="citation" data-cites="P0482R6">[<a href="#ref-P0482R6" role="doc-biblioref">P0482R6</a>]</span></td>
<td>Remove: <span class="citation" data-cites="P2873">[<a href="#ref-P2873" role="doc-biblioref">P2873</a>]</span></td>
<td>LEWG</td>
</tr>
<tr class="even">
<td><a href="#D.29">D.29</a></td>
<td><code class="sourceCode default">filesystem::u8path</code></td>
<td>C++17</td>
<td>C++20</td>
<td><span class="citation" data-cites="P0482R6">[<a href="#ref-P0482R6" role="doc-biblioref">P0482R6</a>]</span></td>
<td>No action</td>
<td>SG16</td>
</tr>
<tr class="odd">
<td><a href="#D.30">D.30</a></td>
<td>atomic operations</td>
<td>C++11</td>
<td>C++20</td>
<td><span class="citation" data-cites="P0883R2">[<a href="#ref-P0883R2" role="doc-biblioref">P0883R2</a>]</span></td>
<td>Address by <span class="citation" data-cites="P2866">[<a href="#ref-P2866" role="doc-biblioref">P2866</a>]</span></td>
<td>LWG</td>
</tr>
</tbody>
</table>
<h1 data-number="6" id="reviews"><span class="header-section-number">6</span> Review By Clause<a href="#reviews" class="self-link"></a></h1>
<h2 data-number="6.1" id="D.1"><span class="header-section-number">6.1</span> General [depr.general]<a href="#D.1" class="self-link"></a></h2>
<p>There is no normative content in the general clause, so nothing to
do. We mention it here only so that the automatic subtitle numbering
stays in sync with Annex D of <span class="citation" data-cites="N4950">[<a href="#ref-N4950" role="doc-biblioref">N4950</a>]</span>.</p>
<h2 data-number="6.2" id="D.2"><span class="header-section-number">6.2</span> Arithmetic conversion on
enumerations [depr.arith.conv.enum]<a href="#D.2" class="self-link"></a></h2>
<p>Implicit arithmetic conversion on unscoped enumerations when involved
in mixed operations with another type are part of our C heritage, but
were deprecated to match up with the design of the spaceship operator
for C++20 by paper <span class="citation" data-cites="P1120R0">[<a href="#ref-P1120R0" role="doc-biblioref">P1120R0</a>]</span>.</p>
<p>A full rationale for why we should act to remove these deprecated
conversions now, along with full core wording, is addressed by paper
<span class="citation" data-cites="P2864R2">[<a href="#ref-P2864R2" role="doc-biblioref">P2864R2</a>]</span>.</p>
<h3 data-number="6.2.1" id="ewg-review-2023-june-varna"><span class="header-section-number">6.2.1</span> EWG Review, 2023 June,
Varna<a href="#ewg-review-2023-june-varna" class="self-link"></a></h3>
<p>Concerns were raised about a lack of real implementation experience,
especially in SFINAE contexts where deprecation warnings cannot reach.
There remain some concerns about C compatibility. See <span class="citation" data-cites="P2864R2">[<a href="#ref-P2864R2" role="doc-biblioref">P2864R2</a>]</span> for details.</p>
<p>There will be no further progress on this topic for C++26, and we
should look to present a stronger motivation and usage experience for
the C++29 review.</p>
<h3 data-number="6.2.2" id="ewg-review-2023-november-kona"><span class="header-section-number">6.2.2</span> EWG Review, 2023 November,
Kona<a href="#ewg-review-2023-november-kona" class="self-link"></a></h3>
<h3 data-number="6.2.3" id="mailing-december-2023"><span class="header-section-number">6.2.3</span> Mailing, December 2023<a href="#mailing-december-2023" class="self-link"></a></h3>
<p>Adopted into Working Draft N4971.</p>
<h2 data-number="6.3" id="D.3"><span class="header-section-number">6.3</span> Implicit capture of
<code class="sourceCode default">*this</code> by reference
[depr.capture.this]<a href="#D.3" class="self-link"></a></h2>
<p>This feature was deprecated in C++20 by <span class="citation" data-cites="P0806R2">[<a href="#ref-P0806R2" role="doc-biblioref">P0806R2</a>]</span>. Its removal would potentially
impact on programs written against C++11 or a later standard, when
lambda captures were first introduced.</p>
<p>The concern addressed by the paper is that the implicit capture of
<code class="sourceCode default">this</code> as a reference to data
members on a default-capture that copies is surprising and often
misleading. C++20 introduced the explicit capture of
<code class="sourceCode default">this</code> as a pointer, or
<code class="sourceCode default">*this</code> by value, to clearly
disambiguate the different use cases.</p>
<p>MSVC, gcc, and EDG front ends have been warning about this
deprecation since their experimental C++20 support, before the standard
itself was ratified. As of the publication of this paper, the Clang
compiler still does not warn on use of this feature, although a patch to
add that warning is checked into the compiler trunk for what should
become Clang 17.0.</p>
<p>Experience over the last few years has been mixed, as several
compilers would warn on the preferred syntax as redundant
<em>before</em> C++20, so it becomes difficult to get a warning free
build with a single syntax, and is typically achieved by users proving a
macro to choose the preferred form.</p>
<p>The lack of warning in Clang suggests the may be many users of modern
C++ that are still unaware of this deprecation, so the tentative
recommendation is to take no action in C++26, and reconsider more
carefully for C++29. However, the mixed experience of having users
decide which warning they prefer suggests we might want to take more
decisive action for this review, which would require a follow-up paper
to consider the merits of removal vs. undeprecation.</p>
<h3 data-number="6.3.1" id="ewg-review-2023-june-varna-1"><span class="header-section-number">6.3.1</span> EWG Review, 2023 June,
Varna<a href="#ewg-review-2023-june-varna-1" class="self-link"></a></h3>
<p>Consensus to leave deprecated for another release cycle.</p>
<h2 data-number="6.4" id="D.4"><span class="header-section-number">6.4</span> Array comparisons
[depr.array.comp]<a href="#D.4" class="self-link"></a></h2>
<p>Implicit array-to-pointer decay when invoking any of the comparison
operators is part of our C heritage, but these conversions were
deprecated to match up with the design of the spaceship operator for
C++20 by paper <span class="citation" data-cites="P1120R0">[<a href="#ref-P1120R0" role="doc-biblioref">P1120R0</a>]</span>.</p>
<p>The implicit decay in these cases is often misleading and rarely
helpful. A full rationale for why we should act to remove these
deprecated conversions now, along with full core wording, is addressed
by paper <span class="citation" data-cites="P2865">[<a href="#ref-P2865" role="doc-biblioref">P2865</a>]</span>.</p>
<h3 data-number="6.4.1" id="ewg-review-2023-june-varna-2"><span class="header-section-number">6.4.1</span> EWG Review, 2023 June,
Varna<a href="#ewg-review-2023-june-varna-2" class="self-link"></a></h3>
<p>No concerns were raised, and this paper proceeds to Core.</p>
<h3 data-number="6.4.2" id="cwg-review-2023-june-varna"><span class="header-section-number">6.4.2</span> CWG Review, 2023 June,
Varna<a href="#cwg-review-2023-june-varna" class="self-link"></a></h3>
<p>Concerns were raised about comparison with null pointers, and this
paper was sent back to EWG.</p>
<h3 data-number="6.4.3" id="mailing-october-2023"><span class="header-section-number">6.4.3</span> Mailing, October 2023<a href="#mailing-october-2023" class="self-link"></a></h3>
<p>Wording updated to preserve non-deprecated semantics. Created paper
<span class="citation" data-cites="P2984R0">[<a href="#ref-P2984R0" role="doc-biblioref">P2984R0</a>]</span> to consider deprecation and
removal of array comparison with null pointer constants.</p>
<p>Paper sent back to Core.</p>
<h2 data-number="6.5" id="D.5"><span class="header-section-number">6.5</span> Deprecated
<code class="sourceCode default">volatile</code> types
[depr.volatile.type]<a href="#D.5" class="self-link"></a></h2>
<p>The <code class="sourceCode default">volatile</code> keyword is part
of our C heritage, but a variety of usages were deprecated for C++20, in
conjunction with our C liaison, by paper <span class="citation" data-cites="P1152R4">[<a href="#ref-P1152R4" role="doc-biblioref">P1152R4</a>]</span>.</p>
<p>As the C committee looked to adopt our deprecations, they got
feedback from their vendors that they considered some of the deprecated
uses as essential, so a subset of this functionality was undeprecated
for C++23 by <span class="citation" data-cites="P2327R1">[<a href="#ref-P2327R1" role="doc-biblioref">P2327R1</a>]</span>.</p>
<p>The remaining set of deprecated operations remain an often misleading
source of bugs, so paper <span class="citation" data-cites="P2866">[<a href="#ref-P2866" role="doc-biblioref">P2866</a>]</span> provides
further rationale for why we should act to remove these deprecated
conversions now, along with full core and library wording.</p>
<h3 data-number="6.5.1" id="ewg-review-2023-june-varna-3"><span class="header-section-number">6.5.1</span> EWG Review, 2023 June,
Varna<a href="#ewg-review-2023-june-varna-3" class="self-link"></a></h3>
<p>Extensive discussions about volatile structured bindings, see <span class="citation" data-cites="P2866">[<a href="#ref-P2866" role="doc-biblioref">P2866</a>]</span> for details.</p>
<p>Ultimately, there was consensus to send this document onto its next
stage, which is LEWG, and then proceeding straight to Core.</p>
<h2 data-number="6.6" id="D.6"><span class="header-section-number">6.6</span> Redeclaration of
<code class="sourceCode default">static constexpr</code> data members
[depr.static.constexpr]<a href="#D.6" class="self-link"></a></h2>
<p>Static <code class="sourceCode default">constexpr</code> data members
were added to the language in C++11, as part of the initial
<code class="sourceCode default">constexpr</code> feature. However, they
still required a definition of the member outside the class. When inline
variables were added in C++17 by <span class="citation" data-cites="P0386R2">[<a href="#ref-P0386R2" role="doc-biblioref">P0386R2</a>]</span> then
<code class="sourceCode default">static constexpr</code> data members
became implicitly <code class="sourceCode default">inline</code>, and
the external definition became redundant, so was deprecated. By the time
C++26 is published, such out-of-class definitions will have been
deprecated longer than they were required.</p>
<p>However, as of writing this paper in March 2023, none of the 4 major
compiler front ends report a deprecated use warning on the example in
the standard, including the latest trunk build for open source
compilers. Therefore, the tentative recommendation of this paper is for
no action in the standard towards removing this feature, and encourage
the front ends to start reporting deprecated usage to their users. We
might consider undeprecation given the lack of enthusiasm of vendors to
warn on redundant definitions, although that would feel like a step
backwards, maintaining an exception to the One Definition Rule.</p>
<p>When considering the removal of redundant definitions, it seems
simple enough to support a code base that is common with C++11 and the
feature removal (or warned deprecation) with a simple feature check:</p>
<div class="sourceCode" id="cb1"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#if !defined(__cpp_inline_variables)</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="kw">constexpr</span> Type Class<span class="op">::</span>Member;</span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="pp">#endif</span></span></code></pre></div>
<h3 data-number="6.6.1" id="ewg-review-2023-june-varna-4"><span class="header-section-number">6.6.1</span> EWG Review, 2023 June,
Varna<a href="#ewg-review-2023-june-varna-4" class="self-link"></a></h3>
<p>There is no interest in removing a feature that does no harm, and
that no compilers are yet issuing deprecation warnings for.</p>
<p>Then the question was whether to undeprecate this feature, as
deprecation seems to have had no impact.</p>
<p>Poll: EWG is interested in undeprecating defining inline
<code class="sourceCode default">constexpr</code> class variables
(P2863R0 section 6.6).</p>
<div class="sourceCode" id="cb2"><pre class="sourceCode default"><code class="sourceCode default"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a>SF  F  N  A SA</span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a> 2 12  7  3  0</span></code></pre></div>
<p>A follow-up paper is expected from the same author promoting and
proposing undeprecation.</p>
<h3 data-number="6.6.2" id="mailing-october-2023-1"><span class="header-section-number">6.6.2</span> Mailing, October 2023<a href="#mailing-october-2023-1" class="self-link"></a></h3>
<p>Submitted paper [P2984R0] to address this deprecation.</p>
<h2 data-number="6.7" id="D.7"><span class="header-section-number">6.7</span> Non-local use of TU-local
entities [depr.local]<a href="#D.7" class="self-link"></a></h2>
<p>This feature was deprecated for C++20 as part of the effort to
cleanly introduce modules into the language, and was adopted by paper
<span class="citation" data-cites="P1815R2">[<a href="#ref-P1815R2" role="doc-biblioref">P1815R2</a>]</span>. It potentially impacts on code
written against C++98 and later standards.</p>
<p>This feature was deprecated only at the final meeting of the C++20
development cycle, and at the time this paper is written, deployment
experience with standard modules is still limited, and it is not clear
if we have any insight into how much code has been impacted by this
deprecation. No current compilers issue a deprecation warning on
affected code. As such, the tentative recommendation is too take no
action — there is not even sufficient experience to consider
undeprecation.</p>
<h3 data-number="6.7.1" id="ewg-review-2023-june-varna-5"><span class="header-section-number">6.7.1</span> EWG Review, 2023 June,
Varna<a href="#ewg-review-2023-june-varna-5" class="self-link"></a></h3>
<p>Consensus to leave deprecated for another release cycle.</p>
<h2 data-number="6.8" id="D.8"><span class="header-section-number">6.8</span> Implicit declaration of copy
functions [depr.impldec]<a href="#D.8" class="self-link"></a></h2>
<p>This feature was deprecated for C++11 by paper <span class="citation" data-cites="N3203">[<a href="#ref-N3203" role="doc-biblioref">N3203</a>]</span> as part of integrating a good
user experience defining classes now that rvalue references are part of
the language. The deprecated parts address the default behavior of C++03
code.</p>
<p>The following test program will demonstrate deprecation warnings in
gcc since release 9.1, and Clang since release 10.0. For both compilers,
the command line switch <code class="sourceCode default">-Wextra</code>
is required to enable these deprecation warnings. As of the publication
of this paper in April 2023, the EDG and MSVC front ends do not appear
to support this warning yet.</p>
<div class="sourceCode" id="cb3"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> A <span class="op">{</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>    A<span class="op">()</span> <span class="op">=</span> <span class="cf">default</span>;</span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a>    A<span class="op">(</span>A <span class="kw">const</span><span class="op">&amp;){}</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a><span class="op">}</span>;</span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> B <span class="op">{</span></span>
<span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a>    B<span class="op">&amp;</span> <span class="kw">operator</span><span class="op">=(</span>B <span class="kw">const</span><span class="op">&amp;){</span> <span class="cf">return</span> <span class="op">*</span><span class="kw">this</span>; <span class="op">}</span></span>
<span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a><span class="op">}</span>;</span>
<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> C <span class="op">{</span></span>
<span id="cb3-11"><a href="#cb3-11" aria-hidden="true" tabindex="-1"></a>    <span class="op">~</span>C<span class="op">()</span> <span class="op">{}</span></span>
<span id="cb3-12"><a href="#cb3-12" aria-hidden="true" tabindex="-1"></a><span class="op">}</span>;</span>
<span id="cb3-13"><a href="#cb3-13" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-14"><a href="#cb3-14" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
<span id="cb3-15"><a href="#cb3-15" aria-hidden="true" tabindex="-1"></a>    A a<span class="op">{}</span>;</span>
<span id="cb3-16"><a href="#cb3-16" aria-hidden="true" tabindex="-1"></a>    A ax <span class="op">=</span> a;</span>
<span id="cb3-17"><a href="#cb3-17" aria-hidden="true" tabindex="-1"></a>    a <span class="op">=</span> ax;     <span class="co">// use of deprecated operator</span></span>
<span id="cb3-18"><a href="#cb3-18" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-19"><a href="#cb3-19" aria-hidden="true" tabindex="-1"></a>    B b<span class="op">{}</span>;</span>
<span id="cb3-20"><a href="#cb3-20" aria-hidden="true" tabindex="-1"></a>    B bx <span class="op">=</span> b;   <span class="co">// use of deprecated constructor</span></span>
<span id="cb3-21"><a href="#cb3-21" aria-hidden="true" tabindex="-1"></a>    b <span class="op">=</span> bx;</span>
<span id="cb3-22"><a href="#cb3-22" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-23"><a href="#cb3-23" aria-hidden="true" tabindex="-1"></a>    C c<span class="op">{}</span>;</span>
<span id="cb3-24"><a href="#cb3-24" aria-hidden="true" tabindex="-1"></a>    C cx <span class="op">=</span> c;   <span class="co">// no-one warns on deprecated constructor</span></span>
<span id="cb3-25"><a href="#cb3-25" aria-hidden="true" tabindex="-1"></a>    c <span class="op">=</span> cx;     <span class="co">// no-one warns on deprecated operator</span></span>
<span id="cb3-26"><a href="#cb3-26" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>Note that no compiler is warning on copy operations in case
<code class="sourceCode default">C</code>, declaring a user provided
destructor.</p>
<p>This topic was last considered by EWG for C++23 at the 2022 Kona
meeting, where core issue <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#2132">2132</a>
looked into undeprecation. The notes on that discussion offer nothing
more than an immediate call for consensus to not deprecate, and close
that issue as NAD.</p>
<p>This is the oldest deprecated Core language facility, the only one
remaining that was deprecated before C++17. When C++26 is published it
will have been deprecated for 16 years so the tentative recommendation
for this paper is to request authors for a paper providing a considered
analysis of removal and undeprecation, in whole or in part, for
C++26.</p>
<h3 data-number="6.8.1" id="ewg-review-2023-june-varna-6"><span class="header-section-number">6.8.1</span> EWG Review, 2023 June,
Varna<a href="#ewg-review-2023-june-varna-6" class="self-link"></a></h3>
<p>Consensus to leave deprecated for another release cycle. We would
consider re-opening if someone came forward with a paper that addressed
user impact in the real world, especially with SFINAE contexts that are
not easily detected by deprecation warnings.</p>
<h2 data-number="6.9" id="D.9"><span class="header-section-number">6.9</span> Literal operator function
declarations using an identifier [depr.lit]<a href="#D.9" class="self-link"></a></h2>
<p>The use of whitespace between the
<code class="sourceCode default">operator &quot;&quot;</code> and the
following identifier to denote a user-defined literal suffix was
deprecated for C++23 by <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#2521">Core
issue 2521</a>. In deprecating this feature at the 2023 Issaquah
meeting, there is a clear intent that this is one step along the way to
actively remove that support:</p>
<p>EWG had consensus on “The form of User Defined Literals that permits
a space between the quotes and the name of the literal should be
deprecated, and eventually removed. Additionally, the UDL name should be
excluded from the restriction in 5.10 [lex.name] in the non-deprecated
form (sans space).”</p>
<p>Given the lateness in the process of this deprecation, no currently
available compiler has a deprecation warning, nor even the trunk builds
of open source compilers. Hence, the tentative recommendation is to take
no action.</p>
<p>However, given the expressed intent to actively remove the support
for that whitespace, we may want to consider how actively we want to
pursue removal, and request a paper to research whether such removal
would be viable in the 3 year release cycle from C++23 to C++26.</p>
<h3 data-number="6.9.1" id="ewg-review-2023-june-varna-7"><span class="header-section-number">6.9.1</span> EWG Review, 2023 June,
Varna<a href="#ewg-review-2023-june-varna-7" class="self-link"></a></h3>
<p>Consensus to leave deprecated for another release cycle.</p>
<h2 data-number="6.10" id="D.10"><span class="header-section-number">6.10</span>
<code class="sourceCode default">template</code> keyword before
qualified names [depr.template.template]<a href="#D.10" class="self-link"></a></h2>
<p>This feature was deprecated for C++23 by paper <span class="citation" data-cites="P1787R6">[<a href="#ref-P1787R6" role="doc-biblioref">P1787R6</a>]</span>, Declarations and where to find
them. The following code sample is used to test whether compilers have
implemented that paper yet, and whether they diagnose the deprecated
use:</p>
<div class="sourceCode" id="cb4"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span> <span class="op">&lt;</span><span class="kw">class</span> T<span class="op">&gt;</span> <span class="kw">struct</span> A <span class="op">{</span></span>
<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a>   <span class="dt">void</span> f<span class="op">(</span><span class="dt">int</span><span class="op">)</span>;</span>
<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a>   <span class="kw">template</span> <span class="op">&lt;</span><span class="kw">class</span> U<span class="op">&gt;</span> <span class="dt">void</span> f<span class="op">(</span>U<span class="op">)</span>;</span>
<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a><span class="op">}</span>;</span>
<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span> <span class="op">&lt;</span><span class="kw">class</span> T<span class="op">&gt;</span></span>
<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> B <span class="op">{</span></span>
<span id="cb4-8"><a href="#cb4-8" aria-hidden="true" tabindex="-1"></a>   <span class="kw">template</span> <span class="op">&lt;</span><span class="kw">class</span> T2<span class="op">&gt;</span> <span class="kw">struct</span> C <span class="op">{</span> <span class="op">}</span>;</span>
<span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a><span class="op">}</span>;</span>
<span id="cb4-10"><a href="#cb4-10" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb4-11"><a href="#cb4-11" aria-hidden="true" tabindex="-1"></a><span class="co">// deprecated: T::C is assumed to name a class template:</span></span>
<span id="cb4-12"><a href="#cb4-12" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span> <span class="op">&lt;</span> <span class="kw">class</span> T</span>
<span id="cb4-13"><a href="#cb4-13" aria-hidden="true" tabindex="-1"></a>         , <span class="kw">template</span> <span class="op">&lt;</span><span class="kw">class</span> X<span class="op">&gt;</span> <span class="kw">class</span> TT <span class="op">=</span> T<span class="op">::</span><span class="kw">template</span> C</span>
<span id="cb4-14"><a href="#cb4-14" aria-hidden="true" tabindex="-1"></a>         <span class="op">&gt;</span></span>
<span id="cb4-15"><a href="#cb4-15" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> D <span class="op">{</span> <span class="op">}</span>;</span>
<span id="cb4-16"><a href="#cb4-16" aria-hidden="true" tabindex="-1"></a>D<span class="op">&lt;</span>B<span class="op">&lt;</span><span class="dt">int</span><span class="op">&gt;</span> <span class="op">&gt;</span> db;</span>
<span id="cb4-17"><a href="#cb4-17" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb4-18"><a href="#cb4-18" aria-hidden="true" tabindex="-1"></a><span class="co">// recommended: T::C is assumed to name a class template:</span></span>
<span id="cb4-19"><a href="#cb4-19" aria-hidden="true" tabindex="-1"></a><span class="kw">template</span> <span class="op">&lt;</span> <span class="kw">class</span> T</span>
<span id="cb4-20"><a href="#cb4-20" aria-hidden="true" tabindex="-1"></a>         , <span class="kw">template</span> <span class="op">&lt;</span><span class="kw">class</span> X<span class="op">&gt;</span> <span class="kw">class</span> TT <span class="op">=</span> T<span class="op">::</span>C</span>
<span id="cb4-21"><a href="#cb4-21" aria-hidden="true" tabindex="-1"></a>         <span class="op">&gt;</span></span>
<span id="cb4-22"><a href="#cb4-22" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> E <span class="op">{</span> <span class="op">}</span>;</span>
<span id="cb4-23"><a href="#cb4-23" aria-hidden="true" tabindex="-1"></a>E<span class="op">&lt;</span>B<span class="op">&lt;</span><span class="dt">int</span><span class="op">&gt;</span> <span class="op">&gt;</span> db;</span></code></pre></div>
<p>Testing with the latest compilers available from Godbolt Compiler
Explorer shows that no current compiler has implemented this part of
that paper yet. Without the implementation, not only are there no
deprecation warnings, the recommended code transformation does not
compile.</p>
<p>Given the current lack of implementation, it seems far too early to
consider removing this feature, so the tentative recommendation is to
take no action.</p>
<p>Given the change in C++11 to accept redundant use of the
<code class="sourceCode default">typename</code> keyword in <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#382">Core
issue 382</a> we might consider undeprecating this feature before
compilers start issuing deprecation warning.</p>
<p>Further, C++11 also allowed redundant use of
<code class="sourceCode default">::template</code> where not required in
non-template cases, <a href="https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#468">Core
issue 468</a>, suggesting a level of redundancy is desirable so that
users are not expected to have such a precise mental compiler,
especially when learning the language.</p>
<h3 data-number="6.10.1" id="ewg-review-2023-june-varna-8"><span class="header-section-number">6.10.1</span> EWG Review, 2023 June,
Varna<a href="#ewg-review-2023-june-varna-8" class="self-link"></a></h3>
<p>Consensus to leave deprecated for another release cycle.</p>
<h2 data-number="6.11" id="requires-paragraph-depr.res.on.required"><span class="header-section-number">6.11</span> Requires paragraph <span id="D.11">depr.res.on.required</span><a href="#requires-paragraph-depr.res.on.required" class="self-link"></a></h2>
<p>This style of documentation was deprecated editorially for C++20
following the application of a sequence of papers to update each main
library clause, consistently following the new conventions established
by paper <span class="citation" data-cites="P0788R3">[<a href="#ref-P0788R3" role="doc-biblioref">P0788R3</a>]</span>. The author
provides a paper with tentative wording to apply the last of those
changes to Annex D, <span class="citation" data-cites="P2874R1">[<a href="#ref-P2874R1" role="doc-biblioref">P2874R1</a>]</span>.</p>
<p>Note that resolving this will touch wording in clauses D.14, D.19,
D.24, D.27, and D.29. We do not track these changes in the paper index
above, as they have no impact on whether deprecated library facilities
are removed, although the edits would be helpful should we desire to
undeprecate any of those clauses.</p>
<h3 data-number="6.11.1" id="ewg-review-2023-june-varna-9"><span class="header-section-number">6.11.1</span> EWG Review, 2023 June,
Varna<a href="#ewg-review-2023-june-varna-9" class="self-link"></a></h3>
<p>After applying corrections, sent <span class="citation" data-cites="P2874R1">[<a href="#ref-P2874R1" role="doc-biblioref">P2874R1</a>]</span> to poll in the Varna
plenary.</p>
<h3 data-number="6.11.2" id="mailing-october-2023-2"><span class="header-section-number">6.11.2</span> Mailing, October 2023<a href="#mailing-october-2023-2" class="self-link"></a></h3>
<p>Adopted into Working Draft N4958.</p>
<h2 data-number="6.12" id="D.12"><span class="header-section-number">6.12</span>
<code class="sourceCode default">has_denorm</code> members in
<code class="sourceCode default">numeric_limits</code>
[depr.numeric.limits.has.denorm]<a href="#D.12" class="self-link"></a></h2>
<p>This small part of
<code class="sourceCode default">numeric_limits</code> for
floating-point types was deprecated for C++23 by paper <span class="citation" data-cites="P2614R2">[<a href="#ref-P2614R2" role="doc-biblioref">P2614R2</a>]</span>.</p>
<p>As a relatively late change to the Standard Library, we have little
experience in how widely triggered the deprecation warning will be, so
the tentative recommendation of this paper is to take no action.</p>
<p>However, it is worth noting that the Zombie Names policy means that
even if we were to remove this feature from the standard tomorrow,
vendors can continue to maintain this feature as a conforming extension
for as long as their customers demand, so with the perceived low risk it
may be worth asking for a paper to remove this feature entirely from
C++26.</p>
<h3 data-number="6.12.1" id="initial-lewg-review-kona-20231107"><span class="header-section-number">6.12.1</span> Initial LEWG Review: Kona,
2023/11/07<a href="#initial-lewg-review-kona-20231107" class="self-link"></a></h3>
<p>It was observed that code searches show almost no use of these names.
However, they were deprecated only within the last 12 months as part of
the C++23 standard, that is still awaiting the final stages of
publication.</p>
<p>Consensus to make no changes for C++26.</p>
<h2 data-number="6.13" id="D.13"><span class="header-section-number">6.13</span> Deprecated C macros
[depr.c.macros]<a href="#D.13" class="self-link"></a></h2>
<p>The C Standard Library headers were undeprecated for C++23 by paper
<span class="citation" data-cites="P2340R1">[<a href="#ref-P2340R1" role="doc-biblioref">P2340R1</a>]</span>. Then the C macros that report
that identifiers corresponding to C++ keywords have been defined as
macros in language support headers were again deprecated as “immediate
issues” by paper <span class="citation" data-cites="P2790R0">[<a href="#ref-P2790R0" role="doc-biblioref">P2790R0</a>]</span>, resolving
national body comments.</p>
<p>It was noted during review that these tokens will become true
keywords in C23, so the pending C Standard will be removing these
macros. Hence, they remain deprecated in C++23, and we except to see
them removed by a paper updating the C++26 Standard to use the latest C
Standard Library.</p>
<p>The tentative recommendation of this paper is to take no action as
part of this deprecation review, anticipating the C library update paper
where this change would be one small part of the larger whole.</p>
<h3 data-number="6.13.1" id="initial-lewg-review-kona-20231107-1"><span class="header-section-number">6.13.1</span> Initial LEWG Review: Kona,
2023/11/07<a href="#initial-lewg-review-kona-20231107-1" class="self-link"></a></h3>
<p>Consensus to follow the suggestion of this paper, and handle any
progress on removal as part of any future paper to rebase our standard
onto C23.</p>
<h2 data-number="6.14" id="D.14"><span class="header-section-number">6.14</span> Relational operators
[depr.relops]<a href="#D.14" class="self-link"></a></h2>
<p>The <code class="sourceCode default">std::rel_ops</code> namespace
was introduced in the original C++ Standard, so its removal would
potentially impact on code written against C++98 and later standards. It
was deprecated with the introduction of support for the 3-way comparison
“spaceship” operator in C++20, by paper <span class="citation" data-cites="P0768R1">[<a href="#ref-P0768R1" role="doc-biblioref">P0768R1</a>]</span>.</p>
<p>As of publishing this paper, none of the three popular standard
libraries give any deprecation warnings on the sample code in the Tony
tables below.</p>
<!-- Note that the `operator<=>` markup causes an unfortunate line-break in the
     rendered html that needs to be fixed up by hand after generation.  We have
     looked into a variety of workarounds in the markdown, but pandoc just
     narrows the table or spills on the whole line if we rearrange the text -->
<table>
<thead>
<tr class="header">
<th><div style="text-align:center">
<strong>Deprecated</strong>
</div></th>
<th><div style="text-align:center">
<strong>Modern</strong>
</div></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><div>

<div class="sourceCode" id="cb5"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;cassert&gt;</span></span>
<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;utility&gt;</span></span>
<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> Test <span class="op">{</span></span>
<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a>   <span class="dt">int</span> data <span class="op">=</span> <span class="dv">0</span>;</span>
<span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a><span class="kw">friend</span> <span class="dt">bool</span> <span class="kw">operator</span><span class="op">==(</span>Test a, Test b<span class="op">){</span><span class="cf">return</span> a<span class="op">.</span>data <span class="op">==</span> b<span class="op">.</span>data;<span class="op">}</span></span>
<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a><span class="kw">friend</span> <span class="dt">bool</span> <span class="kw">operator</span> <span class="op">&lt;(</span>Test a, Test b<span class="op">){</span><span class="cf">return</span> a<span class="op">.</span>data <span class="op">&lt;</span>  b<span class="op">.</span>data;<span class="op">}</span></span>
<span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a><span class="op">}</span>;</span>
<span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
<span id="cb5-12"><a href="#cb5-12" aria-hidden="true" tabindex="-1"></a>    Test x<span class="op">{}</span>;</span>
<span id="cb5-13"><a href="#cb5-13" aria-hidden="true" tabindex="-1"></a>    Test y<span class="op">{</span><span class="dv">2</span><span class="op">}</span>;</span>
<span id="cb5-14"><a href="#cb5-14" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-15"><a href="#cb5-15" aria-hidden="true" tabindex="-1"></a>    <span class="kw">using</span> <span class="kw">namespace</span> std<span class="op">::</span>rel_ops;</span>
<span id="cb5-16"><a href="#cb5-16" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">==</span> x<span class="op">)</span>;</span>
<span id="cb5-17"><a href="#cb5-17" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">!=</span> y<span class="op">)</span>;</span>
<span id="cb5-18"><a href="#cb5-18" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb5-19"><a href="#cb5-19" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">&lt;</span>  y<span class="op">)</span>;</span>
<span id="cb5-20"><a href="#cb5-20" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">&lt;=</span> y<span class="op">)</span>;</span>
<span id="cb5-21"><a href="#cb5-21" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">&gt;=</span> y<span class="op">)</span>;</span>
<span id="cb5-22"><a href="#cb5-22" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">&gt;</span>  y<span class="op">)</span>;</span>
<span id="cb5-23"><a href="#cb5-23" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>

</div></td>
<td><div>

<div class="sourceCode" id="cb6"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;cassert&gt;</span></span>
<span id="cb6-2"><a href="#cb6-2" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;<span class="add" style="color: #006e28"><ins>compare</ins></span>&gt;</span></span>
<span id="cb6-3"><a href="#cb6-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-4"><a href="#cb6-4" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> Test <span class="op">{</span></span>
<span id="cb6-5"><a href="#cb6-5" aria-hidden="true" tabindex="-1"></a>   <span class="dt">int</span> data <span class="op">=</span> <span class="dv">0</span>;</span>
<span id="cb6-6"><a href="#cb6-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-7"><a href="#cb6-7" aria-hidden="true" tabindex="-1"></a><span class="kw">friend</span> <span class="dt">bool</span> <span class="kw">operator</span> <span class="op">==(</span>Test, Test<span class="op">)</span> <span class="add" style="color: #006e28"><ins>= default;</ins></span></span>
<span id="cb6-8"><a href="#cb6-8" aria-hidden="true" tabindex="-1"></a><span class="kw">friend</span> <span class="add" style="color: #006e28"><ins>auto
operator&lt;=&gt;</ins></span><span class="op">(</span>Test, Test<span class="op">)</span> <span class="add" style="color: #006e28"><ins>= default;</ins></span></span>
<span id="cb6-9"><a href="#cb6-9" aria-hidden="true" tabindex="-1"></a><span class="op">}</span>;</span>
<span id="cb6-10"><a href="#cb6-10" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-11"><a href="#cb6-11" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
<span id="cb6-12"><a href="#cb6-12" aria-hidden="true" tabindex="-1"></a>    Test x<span class="op">{}</span>;</span>
<span id="cb6-13"><a href="#cb6-13" aria-hidden="true" tabindex="-1"></a>    Test y<span class="op">{</span><span class="dv">2</span><span class="op">}</span>;</span>
<span id="cb6-14"><a href="#cb6-14" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-15"><a href="#cb6-15" aria-hidden="true" tabindex="-1"></a>    <span class="rm" style="color: #bf0303"><del><em>// No <span><code class="sourceCode default">using namespace</code></span></em></del></span></span>
<span id="cb6-16"><a href="#cb6-16" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">==</span> x<span class="op">)</span>;</span>
<span id="cb6-17"><a href="#cb6-17" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">!=</span> y<span class="op">)</span>;</span>
<span id="cb6-18"><a href="#cb6-18" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb6-19"><a href="#cb6-19" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">&lt;</span>  y<span class="op">)</span>;</span>
<span id="cb6-20"><a href="#cb6-20" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">&lt;=</span> y<span class="op">)</span>;</span>
<span id="cb6-21"><a href="#cb6-21" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">&gt;=</span> y<span class="op">)</span>;</span>
<span id="cb6-22"><a href="#cb6-22" aria-hidden="true" tabindex="-1"></a>    <span class="ot">assert</span><span class="op">(</span>x <span class="op">&gt;</span>  y<span class="op">)</span>;</span>
<span id="cb6-23"><a href="#cb6-23" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>

</div></td>
</tr>
</tbody>
</table>
<p>The 2023 version of this paper erroneously claimed that all the
comparisons would be synthesized from the same two operations relied
upon by the <code class="sourceCode default">rel_ops</code> operators.
In fact, those rules rely upon supplying the 3-way comparison operator,
rather than <code class="sourceCode default">operator&lt;</code>, as
illustrated above.</p>
<p>Note the three changes:</p>
<ul>
<li><code class="sourceCode default">#include</code> a different
header</li>
<li>provide a different operator
<ul>
<li>note that definitions can be defaulted now</li>
</ul></li>
<li>do not rely on a using directive</li>
</ul>
<p>Given the current lack of deprecation warnings, the tentative
recommendation of this paper is to take no action for C++26 and
encourage Standard Library maintainers to annotate their implementations
as deprecated before the next standard cycle.</p>
<p>As the
<code class="sourceCode default">using namespace std::rel_ops</code>
idiom may be seen as encouraging bad hygiene, especially when applied at
global/namespace scope in a header, there may still be folks motivated
to write a paper expressing a stronger intent to remove this feature for
C++26.</p>
<p>As a historical note, the Standard Library specification itself used
to rely on <code class="sourceCode default">std::rel_ops</code> to
provide the specification for any comparison operator if the necessary
wording were missing. However, as part of C++20, it was confirmed that
no current wording relies on that legacy fall-back, and the
corresponding as-if wording was removed.</p>
<h2 data-number="6.15" id="D.15"><span class="header-section-number">6.15</span>
<code class="sourceCode default">char *</code> streams
[depr.str.strstreams]<a href="#D.15" class="self-link"></a></h2>
<p>The <code class="sourceCode default">char*</code> streams were
provided, pre-deprecated, in C++98 and have been considered for removal
before. All the necessary facilities to migrate to safer and easier to
use streaming facilities were added in C++20 and C++23, so the
recommendation is to remove the deprecated
<code class="sourceCode default">char *</code> streams from C++26 by
<span class="citation" data-cites="P2867">[<a href="#ref-P2867" role="doc-biblioref">P2867</a>]</span>.</p>
<h3 data-number="6.15.1" id="lewg-reflector-review-20231002-20231009"><span class="header-section-number">6.15.1</span> LEWG Reflector Review :
2023/10/02 – 2023/10/09<a href="#lewg-reflector-review-20231002-20231009" class="self-link"></a></h3>
<p>Forward to POLL with 20 votes for and none against.</p>
<h3 data-number="6.15.2" id="lewg-electronic-poll-20231220-20230110"><span class="header-section-number">6.15.2</span> LEWG electronic poll :
2023/12/20 – 2023/01/10<a href="#lewg-electronic-poll-20231220-20230110" class="self-link"></a></h3>
<p>Poll taken: <span class="citation" data-cites="P3053R0">[<a href="#ref-P3053R0" role="doc-biblioref">P3053R0</a>]</span></p>
<p>Poll results: <span class="citation" data-cites="P3054R0">[<a href="#ref-P3054R0" role="doc-biblioref">P3054R0</a>]</span></p>
<p>Conclusion: Forward to LWG</p>
<h2 data-number="6.16" id="D.16"><span class="header-section-number">6.16</span> Deprecated error numbers
[depr.cerrno]<a href="#D.16" class="self-link"></a></h2>
<p>Several macros and enumerators for
<code class="sourceCode default">enum class errc</code> were deprecated
for C++23 by <span class="citation" data-cites="P2790R0">[<a href="#ref-P2790R0" role="doc-biblioref">P2790R0</a>]</span>. While
there is no apparent urgency for their removal given how recently they
were deprecated, the zombie names clause would also give vendors
adequate coverage to retain support at their discretion. This proposal
weakly recommends retaining these names until C++29.</p>
<h3 data-number="6.16.1" id="initial-lewg-review-kona-20231107-2"><span class="header-section-number">6.16.1</span> Initial LEWG Review: Kona,
2023/11/07<a href="#initial-lewg-review-kona-20231107-2" class="self-link"></a></h3>
<p>These names were deprecated late in the C++23 process, and that
standard is still working its way through ISO publication. Consensus to
make no changes here for C++26, allowing time to gain experience with
the deprecation.</p>
<h2 data-number="6.17" id="D.17"><span class="header-section-number">6.17</span> The default allocator
[depr.default.allocator]<a href="#D.17" class="self-link"></a></h2>
<p>The Standard Library
<code class="sourceCode default">allocator</code> class has a member
that can be synthesized from the primary
<code class="sourceCode default">allocator_traits</code> template, and
was deprecated by [#LWG3170]. By providing this member directly, any
classes that derive from
<code class="sourceCode default">std::allocator</code> will not
synthesize this value correctly, but use the
<code class="sourceCode default">true_type</code> value provided
directly by <code class="sourceCode default">std::allocator</code>,
forcing such allocators to provide their own override when that value
could otherwise by synthesized correctly.</p>
<p>While this is a small corner for misuse, the concern is embarrassing
to explain, and the Standard Library allocator is a common example folks
will follow when trying to write their first allocators. Hence, this
paper recommends the removal of this deprecated typedef for C++26 by
<span class="citation" data-cites="P2868R3">[<a href="#ref-P2868R3" role="doc-biblioref">P2868R3</a>]</span>.</p>
<h3 data-number="6.17.1" id="lewg-reflector-review-20230725-20230802"><span class="header-section-number">6.17.1</span> LEWG Reflector Review :
2023/07/25 – 2023/08/02<a href="#lewg-reflector-review-20230725-20230802" class="self-link"></a></h3>
<p>Discussion led to an updated paper with more rationale.</p>
<p>Final tally: 10 forward to POLL, no objections.</p>
<p>Forward to the next electronic poll to send to LWG.</p>
<h3 data-number="6.17.2" id="lewg-electronic-poll-20230921-20231010"><span class="header-section-number">6.17.2</span> LEWG electronic poll :
2023/09/21 – 2023/10/10<a href="#lewg-electronic-poll-20230921-20231010" class="self-link"></a></h3>
<p>Poll taken: <span class="citation" data-cites="P2972R0">[<a href="#ref-P2972R0" role="doc-biblioref">P2972R0</a>]</span></p>
<p>Poll results: <span class="citation" data-cites="P3020R0">[<a href="#ref-P3020R0" role="doc-biblioref">P3020R0</a>]</span></p>
<p>Conclusion: Forward to LWG</p>
<h3 data-number="6.17.3" id="mailing-december-2023-1"><span class="header-section-number">6.17.3</span> Mailing, December 2023<a href="#mailing-december-2023-1" class="self-link"></a></h3>
<p>Adopted into Working Draft N4971.</p>
<h2 data-number="6.18" id="D.18"><span class="header-section-number">6.18</span> Deprecated
<code class="sourceCode default">polymorphic_allocator</code> member
function [depr.mem.poly.allocator.mem]<a href="#D.18" class="self-link"></a></h2>
<p>This feature was deprecated by [#LWG3036]. However, the author of
this paper believes that
<code class="sourceCode default">std::pmr::polymorphic_allocator</code>
is an allocator that will be used in non-generic circumstances, unlike
<code class="sourceCode default">std::allocator</code>, so this member
function that could otherwise be synthesized should still be part of its
pubic interface. Hence, the recommendation is to undeprecate with paper
<span class="citation" data-cites="P2875">[<a href="#ref-P2875" role="doc-biblioref">P2875</a>]</span></p>
<h3 data-number="6.18.1" id="lewg-reflector-review-july-2023"><span class="header-section-number">6.18.1</span> LEWG Reflector Review : July
2023<a href="#lewg-reflector-review-july-2023" class="self-link"></a></h3>
<p>Paper withdrawn until it presents more rationale.</p>
<p>Revised paper available in this mailing.</p>
<h2 data-number="6.19" id="D.19"><span class="header-section-number">6.19</span> Deprecated type traits
[depr.meta.types]<a href="#D.19" class="self-link"></a></h2>
<p>The <code class="sourceCode default">is_pod</code> trait was
deprecated for C++20 by paper <span class="citation" data-cites="P0767R1">[<a href="#ref-P0767R1" role="doc-biblioref">P0767R1</a>]</span> as part of removing the POD
vocabulary from the C++ Standard, both core and library. The term had
changed meaning so frequently that it no longer served as useful
vocabulary. The type trait was extracted to Annex D, and now itself
provides the only definition in the standard for a POD. Client code is
encouraged to use the more specific traits for trivial and standard
layout types to better describe their need. Note that the related term
POF, for Plain Old Function, was removed from C++17 by paper <span class="citation" data-cites="P0270R3">[<a href="#ref-P0270R3" role="doc-biblioref">P0270R3</a>]</span>.</p>
<p>The <code class="sourceCode default">is_pod</code> trait was first
supplied as part of C++11, so its removal would potentially impact
programs written against the C++11 Standard or later. Users have had up
to three years of implementations warning on use of the deprecated
trait, so we could consider removal, with the usual proviso that the
name is preserved as a zombie for previous standardization. As the case
for removal is not urgent, this paper recommends the removal of this
trait from the C++26 Standard, but only weakly. However, the current
wording does not follow library best practices, and should be updated to
better specify the Requires clauses with our modern vocabulary if it is
retained.</p>
<p>The type traits
<code class="sourceCode default">aligned_storage</code> and
<code class="sourceCode default">aligned_union</code> were deprecated
for C++23 by <span class="citation" data-cites="P1413R3">[<a href="#ref-P1413R3" role="doc-biblioref">P1413R3</a>]</span>. They do
use modern library wording, and as they do no active harm the
recommendation is to retain them for C++26 to allow proper time for
users to update their code, and consider again for removal in C++29.</p>
<h3 data-number="6.19.1" id="deployment"><span class="header-section-number">6.19.1</span> Deployment<a href="#deployment" class="self-link"></a></h3>
<p>Tested the following program to observe deprecation warnings for the
<code class="sourceCode default">is_pod</code> trait through a variety
of standard library implementations at Godbolt Compiler Explorer:</p>
<div class="sourceCode" id="cb7"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;type_traits&gt;</span></span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a>   <span class="kw">static_assert</span><span class="op">(</span>std<span class="op">::</span>is_pod<span class="op">&lt;</span><span class="dt">int</span><span class="op">&gt;::</span>value, <span class="st">&quot;oops&quot;</span><span class="op">)</span>;</span>
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a>   <span class="kw">static_assert</span><span class="op">(</span>std<span class="op">::</span>is_pod_v<span class="op">&lt;</span><span class="dt">int</span><span class="op">&gt;</span>, <span class="st">&quot;oops&quot;</span><span class="op">)</span>;</span>
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<ul>
<li>libc++ No deprecation warning</li>
<li>libstdc++ gcc 10.1</li>
<li>Microsoft No deprecation warning</li>
</ul>
<h3 data-number="6.19.2" id="initial-lewg-review-kona-20231107-3"><span class="header-section-number">6.19.2</span> Initial LEWG Review: Kona,
2023/11/07<a href="#initial-lewg-review-kona-20231107-3" class="self-link"></a></h3>
<p>Most of these type traits were deprecated only as recently as C++23,
which is still wending its way through the ISO publication process. The
remaining trait has been retained as the one remaining place in the
standard that defines and uses the term POD. Consensus to make no
changes for C++26</p>
<h2 data-number="6.20" id="D.20"><span class="header-section-number">6.20</span> Tuple [depr.tuple]<a href="#D.20" class="self-link"></a></h2>
<p>This library was deprecated as part of the work on deprecating
unnecessary volatile facilities, so its removal is recommended by paper
<span class="citation" data-cites="P2866">[<a href="#ref-P2866" role="doc-biblioref">P2866</a>]</span>.</p>
<h3 data-number="6.20.1" id="initial-lewg-review-kona-20231107-4"><span class="header-section-number">6.20.1</span> Initial LEWG Review: Kona,
2023/11/07<a href="#initial-lewg-review-kona-20231107-4" class="self-link"></a></h3>
<p>TBD</p>
<h3 data-number="6.20.2" id="lewg-electronic-poll-20231220-20230110-1"><span class="header-section-number">6.20.2</span> LEWG electronic poll :
2023/12/20 – 2023/01/10<a href="#lewg-electronic-poll-20231220-20230110-1" class="self-link"></a></h3>
<p>Poll taken: <span class="citation" data-cites="P3053R0">[<a href="#ref-P3053R0" role="doc-biblioref">P3053R0</a>]</span></p>
<p>Poll results: <span class="citation" data-cites="P3054R0">[<a href="#ref-P3054R0" role="doc-biblioref">P3054R0</a>]</span></p>
<p>Conclusion: Forward to LWG</p>
<h2 data-number="6.21" id="D.21"><span class="header-section-number">6.21</span> Variant [depr.variant]<a href="#D.21" class="self-link"></a></h2>
<p>This library was deprecated as part of the work on deprecating
unnecessary volatile facilities, so its removal is recommended by paper
<span class="citation" data-cites="P2866">[<a href="#ref-P2866" role="doc-biblioref">P2866</a>]</span>.</p>
<h3 data-number="6.21.1" id="initial-lewg-review-kona-20231107-5"><span class="header-section-number">6.21.1</span> Initial LEWG Review: Kona,
2023/11/07<a href="#initial-lewg-review-kona-20231107-5" class="self-link"></a></h3>
<p>TBD</p>
<h3 data-number="6.21.2" id="lewg-electronic-poll-20231220-20230110-2"><span class="header-section-number">6.21.2</span> LEWG electronic poll :
2023/12/20 – 2023/01/10<a href="#lewg-electronic-poll-20231220-20230110-2" class="self-link"></a></h3>
<p>Poll taken: <span class="citation" data-cites="P3053R0">[<a href="#ref-P3053R0" role="doc-biblioref">P3053R0</a>]</span></p>
<p>Poll results: <span class="citation" data-cites="P3054R0">[<a href="#ref-P3054R0" role="doc-biblioref">P3054R0</a>]</span></p>
<p>Conclusion: Forward to LWG</p>
<h2 data-number="6.22" id="D.22"><span class="header-section-number">6.22</span> Deprecated
<code class="sourceCode default">iterator</code> class template
[depr.iterator]<a href="#D.22" class="self-link"></a></h2>
<p>The class template <code class="sourceCode default">iterator</code>
was first deprecated in C++17 by the paper <span class="citation" data-cites="P0174R2">[<a href="#ref-P0174R2" role="doc-biblioref">P0174R2</a>]</span>. The concern was that providing
the needed support for iterator typenames through a templated base
class, determining which name maps to which type purely by parameter
order, was less clear than simply providing the needed names. Further,
there were corner cases in usage that fell out of template syntax that
made this tool hard to recommend as a simpler way of providing the type
names, yet that was its whole reason to exist.</p>
<p>When this facility was reviewed for removal in C++20, it was noted
that there were valid uses that relied on the default template arguments
to deduce at least a few of the needed type names. Subsequent work on
iterators and ranges (<span class="citation" data-cites="P0896R4">[<a href="#ref-P0896R4" role="doc-biblioref">P0896R4</a>]</span>) that
landed in C++20 now means that work is also done by the primary
<code class="sourceCode default">iterator_traits</code> template, and so
the remaining use case (for new code) is also covered, making this class
template strictly redundant.</p>
<p>The main concern that remains is breaking old code by removing this
code from the standard libraries. That risk is ameliorated by the zombie
names clause in the standard, allowing vendors to maintain their own
support for as long as their customers demand. By the time C++23 ships,
those customers will already have been on 6 years notice that their code
might not be supported in future standards. However, we note the
repeated use of the name
<code class="sourceCode default">iterator</code> as a type within many
containers means we might choose to leave this name off the zombie list.
We conservatively place it there anyway, to ensure that we are covered
by the previous standardization terminology to encompass uses other than
as a container iterator typedef.</p>
<p>The recommendation of this paper is to take no action in C++26 until
the is a stronger consensus for removal.</p>
<h3 data-number="6.22.1" id="initial-review-telecon-20200713"><span class="header-section-number">6.22.1</span> Initial Review: telecon
2020/07/13<a href="#initial-review-telecon-20200713" class="self-link"></a></h3>
<p>Concerns were raised about the lack of research into how much code is
likely to break with the removal of this API. We would like to see more
numbers and analysis on publicly available code, such as across all of
Github. The better treatment of implicit generation of
<code class="sourceCode default">iterator_traits</code> in C++23, and
more familiarity with a limited number of code bases that still rely on
this facility, gave more confidence in moving forward with removal than
we had for C++20. It was also noted that the name may be unfortunate
with the chosen form of concept naming adopted for C++20, and so its
removal might lead to one fewer sources of future confusion. Given that
implementers are likely to provide an implementation (through zombie
names freedom) for some time after removal, there was consensus to
proceed with removal, assuming the requested research does not reveal
major concerns before the main LEWG review to follow.</p>
<h2 data-number="6.23" id="D.23"><span class="header-section-number">6.23</span> Deprecated
<code class="sourceCode default">move_iterator</code> access
[depr.move.iter.elem]<a href="#D.23" class="self-link"></a></h2>
<p>This feature was deprecated for C++20 by the paper <span class="citation" data-cites="P1252R2">[<a href="#ref-P1252R2" role="doc-biblioref">P1252R2</a>]</span> highlighting the concern that
for a move iterator adapter, intending to expose its target as an rvalue
(or xvalue), the arrow operator must return the original adapted
iterator, which will likely produce an lvalue when dereferenced. This
operator is not fit for purpose, and cannot be fixed. The workaround for
users is to dereference the move iterator with
<code class="sourceCode default">operator *</code> and call the member
they wish to access using the familiar
<code class="sourceCode default">.</code> notation. This preserves the
value category of the iterator’s target.</p>
<p>The proposal for C++20 was to deprecate this operator, with a view to
removal at a later date. However,
<code class="sourceCode default">operator-&gt;</code> support is part of
the <em>Cpp17InputIterator</em> requirements, so cannot be removed
without addressing that definition. One option might be to accept the
<code class="sourceCode default">std::move_iterator</code> is
<em>not</em> a <em>Cpp17InputIterator</em> at all, but models the
<code class="sourceCode default">input_iterator</code> concept instead.
That might mean deprecating the
<code class="sourceCode default">iterator_category</code> typedef member
as well.</p>
<p>Testing the following program with Godbolt Compiler Explorer, it
appears that libc++ is the only Standard Library implementation, at the
time of writing this paper, that warns on use of the deprecated
operator, and has done so only since Clang 15:</p>
<div class="sourceCode" id="cb8"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="pp">#include </span><span class="im">&lt;iterator&gt;</span></span>
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a><span class="kw">struct</span> Wrap <span class="op">{</span></span>
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a>    <span class="dt">int</span> data;</span>
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a><span class="op">}</span>;</span>
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true" tabindex="-1"></a><span class="dt">int</span> main<span class="op">()</span> <span class="op">{</span></span>
<span id="cb8-8"><a href="#cb8-8" aria-hidden="true" tabindex="-1"></a>   Wrap x <span class="op">=</span> <span class="op">{</span><span class="dv">42</span><span class="op">}</span>;</span>
<span id="cb8-9"><a href="#cb8-9" aria-hidden="true" tabindex="-1"></a>   std<span class="op">::</span>move_iterator it <span class="op">=</span> std<span class="op">::</span>make_move_iterator<span class="op">(&amp;</span>x<span class="op">)</span>;</span>
<span id="cb8-10"><a href="#cb8-10" aria-hidden="true" tabindex="-1"></a>   <span class="kw">auto</span> y <span class="op">=</span> it<span class="op">-&gt;</span>data;</span>
<span id="cb8-11"><a href="#cb8-11" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>The recommendation is to take no action at this time, unless a more
detailed paper is requested.</p>
<h3 data-number="6.23.1" id="initial-lewg-review-kona-20231107-6"><span class="header-section-number">6.23.1</span> Initial LEWG Review: Kona,
2023/11/07<a href="#initial-lewg-review-kona-20231107-6" class="self-link"></a></h3>
<p>It was observed that David Stone is doing work in this space with
more support for implicitly generated operators, <span class="citation" data-cites="P3039R0">[<a href="#ref-P3039R0" role="doc-biblioref">P3039R0</a>]</span>. Consensus is to delegate this
deprecated operator to that paper, thinking that is the appropriate
direction to support removal of the deprecated function.</p>
<h2 data-number="6.24" id="D.24"><span class="header-section-number">6.24</span> Deprecated
<code class="sourceCode default">shared_ptr</code> atomic access
[depr.util.smartptr.shared.atomic]<a href="#D.24" class="self-link"></a></h2>
<p>The legacy C-style atomic API for manipulating shared pointers
provided in C++11 is subtle, frequently misunderstood, and easily
misused to cause data races. A type-safe replacement facility that also
provides support for
<code class="sourceCode default">atomic&lt;weak_ptr&lt;T&gt;&gt;</code>
was added to C++20, so we recommend removing the legacy API at the
earliest opportunity.</p>
<p>See paper <span class="citation" data-cites="P2869">[<a href="#ref-P2869" role="doc-biblioref">P2869</a>]</span> for a more
detailed discussion and proposed wording.</p>
<h3 data-number="6.24.1" id="sg1-concurrency-review-2023-june-varna"><span class="header-section-number">6.24.1</span> SG1 (concurrency) Review,
2023 June, Varna<a href="#sg1-concurrency-review-2023-june-varna" class="self-link"></a></h3>
<p>Polled after discussion of the header compatibility concern:</p>
<p>Poll: Remove deprecated
<code class="sourceCode default">shared_ptr</code> atomic access APIs
from C++26, with any of the library options listed in P2689?</p>
<div class="sourceCode" id="cb9"><pre class="sourceCode default"><code class="sourceCode default"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a>SF  F  N  A SA</span>
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a> 2  4  1  1  0</span></code></pre></div>
<p>Consensus to move this paper to LEWG to resolve the header design
issue, and then continue on to LWG.</p>
<h3 data-number="6.24.2" id="initial-lewg-review-kona-20231107-7"><span class="header-section-number">6.24.2</span> Initial LEWG Review: Kona,
2023/11/07<a href="#initial-lewg-review-kona-20231107-7" class="self-link"></a></h3>
<p>TBD</p>
<h3 data-number="6.24.3" id="lewg-electronic-poll-20231220-20230110-3"><span class="header-section-number">6.24.3</span> LEWG electronic poll :
2023/12/20 – 2023/01/10<a href="#lewg-electronic-poll-20231220-20230110-3" class="self-link"></a></h3>
<p>Poll taken: <span class="citation" data-cites="P3053R0">[<a href="#ref-P3053R0" role="doc-biblioref">P3053R0</a>]</span></p>
<p>Poll results: <span class="citation" data-cites="P3054R0">[<a href="#ref-P3054R0" role="doc-biblioref">P3054R0</a>]</span></p>
<p>Conclusion: Forward to LWG</p>
<h2 data-number="6.25" id="D.25"><span class="header-section-number">6.25</span> Deprecated
<code class="sourceCode default">basic_string</code> capacity
[depr.string.capacity]<a href="#D.25" class="self-link"></a></h2>
<p>See paper <span class="citation" data-cites="P2870R3">[<a href="#ref-P2870R3" role="doc-biblioref">P2870R3</a>]</span> for a more
detailed discussion and proposed wording to remove this facility from
C++26.</p>
<h3 data-number="6.25.1" id="lewg-reflector-review-20230626-20230702"><span class="header-section-number">6.25.1</span> LEWG Reflector Review :
2023/06/26 – 2023/07/02<a href="#lewg-reflector-review-20230626-20230702" class="self-link"></a></h3>
<p>There was one objection that was withdrawn when it was realized that
the C++03 behavior became a no-operation in C++11, so finally removing
that overload helps users find remaining code that needs updating to use
the C++11 name to preserve behavior.</p>
<p>Final tally: 18 forward to POLL, no objections.</p>
<p>Forward to the next electronic poll to send to LWG.</p>
<h3 data-number="6.25.2" id="lewg-electronic-poll-20230921-20231010-1"><span class="header-section-number">6.25.2</span> LEWG electronic poll :
2023/09/21 – 2023/10/10<a href="#lewg-electronic-poll-20230921-20231010-1" class="self-link"></a></h3>
<p>Poll taken: <span class="citation" data-cites="P2972R0">[<a href="#ref-P2972R0" role="doc-biblioref">P2972R0</a>]</span></p>
<p>Poll results: <span class="citation" data-cites="P3020R0">[<a href="#ref-P3020R0" role="doc-biblioref">P3020R0</a>]</span></p>
<p>Conclusion: Forward to LWG</p>
<h3 data-number="6.25.3" id="mailing-december-2023-2"><span class="header-section-number">6.25.3</span> Mailing, December 2023<a href="#mailing-december-2023-2" class="self-link"></a></h3>
<p>Adopted into Working Draft N4971.</p>
<h2 data-number="6.26" id="D.26"><span class="header-section-number">6.26</span> Deprecated standard code
conversion facets [depr.locale.stdcvt]<a href="#D.26" class="self-link"></a></h2>
<p>This feature was originally proposed for C++11 by paper <span class="citation" data-cites="N2007">[<a href="#ref-N2007" role="doc-biblioref">N2007</a>]</span> and deprecated for C++17 by paper
<span class="citation" data-cites="P0618R0">[<a href="#ref-P0618R0" role="doc-biblioref">P0618R0</a>]</span>. As noted at the time, the
feature was underspecified, a source of security issues handling
malformed Unicode, and would require more work than we wished to invest
to bring it up to standard. Since then SG16 has been convened and is
producing a steady stream of work to bring reliable well-specified
Unicode support to C++.</p>
<p>Given vendors propensity to provide ongoing support for deprecated
libraries under the zombie name reservations, we recommend removal from
C++26, see paper <span class="citation" data-cites="P2871R3">[<a href="#ref-P2871R3" role="doc-biblioref">P2871R3</a>]</span> for
details.</p>
<h3 data-number="6.26.1" id="c26-review-by-sg16-telecon-20230524"><span class="header-section-number">6.26.1</span> C++26 Review by SG16:
telecon 2023/05/24<a href="#c26-review-by-sg16-telecon-20230524" class="self-link"></a></h3>
<p>There were some concerns about removal before an alternative solution
lands. However, it was then pointed out that the names in this API lie
as they refer to UTF-16 but actually implement UCS-2, and so must
provide a definition for UCS-2 as it is no longer defined in the Unicode
standard.</p>
<p>No objections to removal in C++26.</p>
<h3 data-number="6.26.2" id="lewg-reflector-review-20230814-20230915"><span class="header-section-number">6.26.2</span> LEWG Reflector Review :
2023/08/14 – 2023/09/15<a href="#lewg-reflector-review-20230814-20230915" class="self-link"></a></h3>
<p>Several folks who did not object were still concerned that we would
be removing a facility before a replacement lands; others acknowledged
they were aware of this when polling to move forward, and though this
was still the right choice. If we did not know that library vendors
would be relying on the Zombie Names clause, there may have been more
objections.</p>
<p>Final tally: 13 forward to POLL, 1 Neutral-but-concerned.</p>
<p>Conclusion: forward to the next electronic poll to send to LWG.</p>
<h3 data-number="6.26.3" id="lewg-electronic-poll-20230921-20231010-2"><span class="header-section-number">6.26.3</span> LEWG electronic poll :
2023/09/21 – 2023/10/10<a href="#lewg-electronic-poll-20230921-20231010-2" class="self-link"></a></h3>
<p>Poll taken: <span class="citation" data-cites="P2972R0">[<a href="#ref-P2972R0" role="doc-biblioref">P2972R0</a>]</span></p>
<p>Poll results: <span class="citation" data-cites="P3020R0">[<a href="#ref-P3020R0" role="doc-biblioref">P3020R0</a>]</span></p>
<p>Conclusion: Forward to LWG</p>
<h3 data-number="6.26.4" id="mailing-december-2023-3"><span class="header-section-number">6.26.4</span> Mailing, December 2023<a href="#mailing-december-2023-3" class="self-link"></a></h3>
<p>Adopted into Working Draft N4971.</p>
<h2 data-number="6.27" id="D.27"><span class="header-section-number">6.27</span> Deprecated convenience
conversion interfaces [depr.conversions]<a href="#D.27" class="self-link"></a></h2>
<p>See paper <span class="citation" data-cites="P2872">[<a href="#ref-P2872" role="doc-biblioref">P2872</a>]</span> for a more
detailed discussion and proposed wording to remove this facility from
C++26.</p>
<h3 data-number="6.27.1" id="c26-review-by-sg16-telecon-20230524-1"><span class="header-section-number">6.27.1</span> C++26 Review by SG16:
telecon 2023/05/24<a href="#c26-review-by-sg16-telecon-20230524-1" class="self-link"></a></h3>
<p>SG16 reviewed P2872R0.</p>
<h4 data-number="6.27.1.1" id="summarize-the-following"><span class="header-section-number">6.27.1.1</span> Summarize the following:<a href="#summarize-the-following" class="self-link"></a></h4>
<p>Giuseppe asked if the paper includes removal of
<code class="sourceCode default">std::wbuffer_convert</code>.</p>
<p>Alisdair confirmed that it does.</p>
<p>Alisdair explained that these were deprecated because the example for
<code class="sourceCode default">std::wstring_convert</code> used
another deprecated feature,
<code class="sourceCode default">std::codecvt_utf8</code> and, due to
other underspecification concerns, no one was motivated to fix them.</p>
<p>Alisdair asked if SG16 is the right group to address this.</p>
<p>PBrett responded affirmatively and stated that SG16 is the group that
misunderstands <code class="sourceCode default">wchar_t</code> the
least.</p>
<p>Alisdair noticed some issues with the paper and concluded that
updates are required before the paper is ready for any action to be
taken on it.</p>
<h2 data-number="6.28" id="D.28"><span class="header-section-number">6.28</span> Deprecated locale category
facets [depr.locale.category]<a href="#D.28" class="self-link"></a></h2>
<p>See paper <span class="citation" data-cites="P2873">[<a href="#ref-P2873" role="doc-biblioref">P2873</a>]</span> for a more
detailed discussion and proposed wording to remove this facility from
C++26.</p>
<!-- OLD RATIONAL

This feature was added as part of the initial basic support for Unicode types
in C++11 by paper [@N2238] and deprecated on the recommendation of SG16 for
C++20 by paper [@P0482R6].

As SG16 do not report any urgent issue relating to this deprecated feature, and
are still working through the process of providing clean Unicode support in the
C++ Standard Library, and given the deprecation is as recent as C++20, both the
strong and weak recommendations are to take no action on this feature at this
time.

### Initial Review: telecon 2020/07/13

Discussion was broadly in favor of removal from the C++23 specification, and
relying on library vendors to maintain source compatibility as long as needed.
However, LEWGI explicitly requested to confer with SG16 in case that study
group is aware of any reason to hold back on removal, before proceeding with
the recommendation.

### SG16 Review: telecon 2020/07/22

SG16 is concerned that `code_cvt` in general has poor error handling
facilities, especially when dealing with encodings that may take multiple code
units to express a code point, and so have more cause to report on malformed
inputs.  The specific facets in [depr.locale.category]{.sref} stand in the way
of putting a minimally useful replacement into the standard, by sitting on the
good names but with poor semantics.  This means that the usual safety net of
the zombie names clause does not apply, as we will want code to not compile for
at least one release in order to introduce a replacement with the same names
but more appropriate semantics.  Concern was raised about removing a feature
deprecated only as recently as the current C++20 Standard.

Polling showed no consensus to recommend the removal for C++23, but no
objection to that removal either.

### LEWGI Consensus:

Confirmed SG16 has no objection; remove this feature from C++23

  -->
<h3 data-number="6.28.1" id="c26-review-by-sg16-telecon-20230524-2"><span class="header-section-number">6.28.1</span> C++26 Review by SG16:
telecon 2023/05/24<a href="#c26-review-by-sg16-telecon-20230524-2" class="self-link"></a></h3>
<p>SG16 reviewed P2873R0.</p>
<h4 data-number="6.28.1.1" id="summarize-the-following-1"><span class="header-section-number">6.28.1.1</span> Summarize the following:<a href="#summarize-the-following-1" class="self-link"></a></h4>
<p>Tom explained that these facets were deprecated because they convert
to and from UTF-8 in char-based storage rather than between the
multibyte encoding like the non-deprecated facets do.</p>
<p>Tom reported that
<code class="sourceCode default">char8_t</code>-based replacements were
added as replacements, but those were a mistake because they won’t be
used by <code class="sourceCode default">char</code>-based streams
anyway.</p>
<p>[ Editor’s note: <span class="citation" data-cites="LWG3767">[<a href="#ref-LWG3767" role="doc-biblioref">LWG3767</a>]</span> tracks
deprecating the <code class="sourceCode default">char8_t</code>-based
facets. ]</p>
<p>PBrett asked for any objections to removal.</p>
<p>No objections were reported.</p>
<p>Corentin spoke in favor of removal.</p>
<h2 data-number="6.29" id="D.29"><span class="header-section-number">6.29</span> Deprecated filesystem path
factory functions [depr.fs.path.factory]<a href="#D.29" class="self-link"></a></h2>
<p>A factory function to create path names from UTF-8 sequences of
<code class="sourceCode default">char</code> was part of the original
filesystem library adopted for C++17 (<span class="citation" data-cites="P0218R1">[<a href="#ref-P0218R1" role="doc-biblioref">P0218R1</a>]</span>). However, this was the only
string-based factory function, as the preferred interface is to simply
construct a path with a string of the corresponding type/encoding. This
factory function was deprecated in C++20 with the addition of
<code class="sourceCode default">char8_t</code> and the ability to now
invoke a specific constructor for UTF-8 encoded (and typed) strings. See
<span class="citation" data-cites="P0482R6">[<a href="#ref-P0482R6" role="doc-biblioref">P0482R6</a>]</span> for details.</p>
<p>The legacy API continues to function, but is more cumbersome than
necessary. There appears to be no compelling case that the API is a risk
through misuse, although the behavior is undefined if fed malformed
UTF-8.</p>
<p>While it does no active harm, there is always a cost to maintaining
text in the standard. The application of zombie names means that even if
we remove this clause from Annex D in C++26, Standard Library vendors
are likely to continue shipping to meet customer demand for some time to
come. In the meantime, the current specification does not follow library
wording best practices, and should be updated to better specify the
<em>Requires:</em> clauses (<span class="citation" data-cites="P2874R1">[<a href="#ref-P2874R1" role="doc-biblioref">P2874R1</a>]</span>).</p>
<h3 data-number="6.29.1" id="c23-review-for-reference"><span class="header-section-number">6.29.1</span> C++23 Review for reference<a href="#c23-review-for-reference" class="self-link"></a></h3>
<p>This component was reviewed by telecon, achieving LEWG consensus for
removal in C++23. However, the author ran out of time to complete the
large paper handling all Annex D removals, and new information has since
come to light with issue <span class="citation" data-cites="LWG3840">[<a href="#ref-LWG3840" role="doc-biblioref">LWG3840</a>]</span> requesting
undeprecation of this function.</p>
<!--

#### Initial Review: telecon 2020/07/13

Discussion was broadly in favor of removal from the C++23 specification, and
relying on library vendors to maintain source compatibility as long as needed.
However, LEWGI explicitly requested to confer with SG16 in case that study
group is aware of any reason to hold back on removal, before proceeding with
the recommendation.

#### SG16 Review: telecon 2020/07/22

SG16 is not persuaded that this is actually a text issue, as filenames in
practice accept a broader definition of text, and treating them as straight
text is often a source of subtle and surprising problems.  There was mild
concern at the idea of removing something deprecated as recently as C++20, but
it was also noted that the deprecating paper was adopted into the working draft
before at least one major library distribution had provided its initial
implementation!  No objection to the removal, if anything a mild encouragement
to proceed!

#### LEWG Consensus:

Following check with SG16 for concerns, recommend removal of this feature from
C++23.

  -->
<h3 data-number="6.29.2" id="lewg-telecon-review-20230110-before-r0-of-this-paper"><span class="header-section-number">6.29.2</span> LEWG telecon Review:
2023/01/10 (before R0 of this paper)<a href="#lewg-telecon-review-20230110-before-r0-of-this-paper" class="self-link"></a></h3>
<p>After some discussion there was little appetite for undeprecating
<code class="sourceCode default">filesystem::u8path</code>. It is the
only standard library interface that requires data provided in
<code class="sourceCode default">char</code>-based storage to be encoded
in a different character encoding than the execution character set or
the encoding used for character and string literals.</p>
<p>For those that intentionally store UTF-8 data in
<code class="sourceCode default">char</code>-based storage and would
prefer not to use a deprecated interface, an equivalent to
<code class="sourceCode default">filesystem::u8path</code> can be
implemented in a few lines of code:</p>
<div class="sourceCode" id="cb10"><pre class="sourceCode cpp"><code class="sourceCode cpp"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="kw">inline</span> <span class="kw">auto</span> myu8path<span class="op">(</span><span class="kw">const</span> <span class="dt">char</span><span class="op">*</span> s<span class="op">)</span> <span class="op">{</span></span>
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a>  std<span class="op">::</span>u8string u8s<span class="op">(</span>s, s<span class="op">+</span>std<span class="op">::</span>strlen<span class="op">(</span>s<span class="op">))</span>;</span>
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a>  <span class="cf">return</span> std<span class="op">::</span>filesystem<span class="op">::</span>path<span class="op">(</span>u8s<span class="op">)</span>;</span>
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a><span class="op">}</span></span></code></pre></div>
<p>SG16, the Unicode and Text Study Group, is evaluating approaches to
enable restricted aliasing support for
<code class="sourceCode default">char8_t</code> such that data in
char-based storage could be passed to a
<code class="sourceCode default">char8_t</code>-based interface without
having to perform a copy as in the example code above; <span class="citation" data-cites="P2626R0">[<a href="#ref-P2626R0" role="doc-biblioref">P2626R0</a>]</span> is one such proposal.</p>
<h3 data-number="6.29.3" id="c26-review-by-sg16-telecon-20230524-3"><span class="header-section-number">6.29.3</span> C++26 Review by SG16:
telecon 2023/05/24<a href="#c26-review-by-sg16-telecon-20230524-3" class="self-link"></a></h3>
<p>SG16 observed that <span class="citation" data-cites="P2626R0">[<a href="#ref-P2626R0" role="doc-biblioref">P2626R0</a>]</span> aims to
solve the root issue behind this problem, and that we should not remove
a feature until it has co-existed at least one standard release with the
facility to migrate to. There was also no enthusiasm for undeprecation,
and a general leaning towards removal in due course, maybe C++29. They
strongly recommend abiding by the status quo on this function for
C++26.</p>
<h3 data-number="6.29.4" id="initial-lewg-review-kona-20231107-8"><span class="header-section-number">6.29.4</span> Initial LEWG Review: Kona,
2023/11/07<a href="#initial-lewg-review-kona-20231107-8" class="self-link"></a></h3>
<p>Some folks mentioned using this interface, and how awkward it is to
write code that is portable across multiple standards that does not rely
on deprecated features; that problem would go away if we undeprecated
this API, that behaves exactly as they expect.</p>
<p>Conversely, there is a desire to remove a potential source of
confusion now that there is a type-safe interface that properly reflects
the text encoding.</p>
<p>It was observed that it might be difficult to gain consensus in
either direction — undeprecation or removal — and this feature may
remain in limbo (Annex D) for many standards.</p>
<p>As the goal of this paper is to try to move deprecated features out
of limbo, there was consensus to send this feature back to SG16 to
consider their preferred direction for the long term future of this
function.</p>
<h2 data-number="6.30" id="D.30"><span class="header-section-number">6.30</span> Deprecated atomic operations
[depr.atomics]<a href="#D.30" class="self-link"></a></h2>
<p>While it does no active harm, there is always a cost to maintaining
text in the standard. This is similarly reflected in the C Standard,
that initially deprecated the
<code class="sourceCode default">ATOMIC_VAR_INT</code> macro (marked it
as obsolescent) in C17, and is actively looking to remove it from the
C2X Standard, per the paper WG14:N2390. We should strongly consider
removing this macro, but perhaps as part of a broader paper to update
our reference to the C23 Standard Library.</p>
<p>The original API to initialize atomic variables from C++11 was
deprecated for C++20 when the atomic template was given a default
constructor to do the right thing. See <span class="citation" data-cites="P0883R2">[<a href="#ref-P0883R2" role="doc-biblioref">P0883R2</a>]</span> for details.</p>
<p>The legacy API continues to function, but is more cumbersome than
necessary. There appears to be no compelling case that the API is a risk
through misuse. However, if updating our reference to the C23 library
removes the <code class="sourceCode default">ATOMIC_VAR_INT</code>
macro, we might want to consider this removal for C++26.</p>
<p>Additionally, the volatile qualified member functions of the
<code class="sourceCode default">atomic</code> class template were
deprecated for C++20 by paper <span class="citation" data-cites="P1831R1">[<a href="#ref-P1831R1" role="doc-biblioref">P1831R1</a>]</span>. Their removal should be
considered as part of <span class="citation" data-cites="P2866">[<a href="#ref-P2866" role="doc-biblioref">P2866</a>]</span> proposing
removal of deprecated volatile operations.</p>
<h3 data-number="6.30.1" id="initial-lewg-review-kona-20231107-9"><span class="header-section-number">6.30.1</span> Initial LEWG Review: Kona,
2023/11/07<a href="#initial-lewg-review-kona-20231107-9" class="self-link"></a></h3>
<p>TBD</p>
<h3 data-number="6.30.2" id="lewg-electronic-poll-20231220-20230110-4"><span class="header-section-number">6.30.2</span> LEWG electronic poll :
2023/12/20 – 2023/01/10<a href="#lewg-electronic-poll-20231220-20230110-4" class="self-link"></a></h3>
<p>Poll taken: <span class="citation" data-cites="P3053R0">[<a href="#ref-P3053R0" role="doc-biblioref">P3053R0</a>]</span></p>
<p>Poll results: <span class="citation" data-cites="P3054R0">[<a href="#ref-P3054R0" role="doc-biblioref">P3054R0</a>]</span></p>
<p>Conclusion: Forward to LWG</p>
<h1 data-number="7" id="ack"><span class="header-section-number">7</span> Acknowledgements<a href="#ack" class="self-link"></a></h1>
<p>Thanks to Michael Park for the pandoc-based framework used to
generate this paper from extended markdown source.</p>
<p>Special thanks for Matt Godbolt for Compiler Explorer, that made it
incredibly simple to test deprecated code samples across a variety of
compilers, ancient and modern. This paper would be much less informed
without the rapid testing it enabled.</p>
<!--
  Note that some references below may not be strictly needed, but by making a
  references entry like this we get to fix code font in the titles of several
  papers.

  References prefer to link to the unversioned document while work is ongoing,
  and switch to the final version once a paper moves to DONE.
  -->
<h1 data-number="8" id="bibliography"><span class="header-section-number">8</span> References<a href="#bibliography" class="self-link"></a></h1>
<div id="refs" class="references csl-bib-body hanging-indent" role="doc-bibliography">
<div id="ref-CWG2521" class="csl-entry" role="doc-biblioentry">
[CWG2521] Jim X. 2022-01-07. User-defined literals and reserved
identifiers. <a href="https://wg21.link/cwg2521"><div class="csl-block">https://wg21.link/cwg2521</div></a>
</div>
<div id="ref-LWG3036" class="csl-entry" role="doc-biblioentry">
[LWG3036] Casey Carter. polymorphic_allocator::destroy is extraneous. <a href="https://wg21.link/lwg3036"><div class="csl-block">https://wg21.link/lwg3036</div></a>
</div>
<div id="ref-LWG3170" class="csl-entry" role="doc-biblioentry">
[LWG3170] Billy O’Neal III. is_always_equal added to std::allocator
makes the standard library treat derived types as always equal. <a href="https://wg21.link/lwg3170"><div class="csl-block">https://wg21.link/lwg3170</div></a>
</div>
<div id="ref-LWG3767" class="csl-entry" role="doc-biblioentry">
[LWG3767] Victor Zverovich. codecvt&lt;charN_t, char8_t, mbstate_t&gt;
incorrectly added to locale. <a href="https://wg21.link/lwg3767"><div class="csl-block">https://wg21.link/lwg3767</div></a>
</div>
<div id="ref-LWG3840" class="csl-entry" role="doc-biblioentry">
[LWG3840] Daniel Krügler. filesystem::u8path should be undeprecated. <a href="https://wg21.link/lwg3840"><div class="csl-block">https://wg21.link/lwg3840</div></a>
</div>
<div id="ref-N2007" class="csl-entry" role="doc-biblioentry">
[N2007] P.J. Plauger. 2006-04-15. Proposed Library Additions for Code
Conversion. <a href="https://wg21.link/n2007"><div class="csl-block">https://wg21.link/n2007</div></a>
</div>
<div id="ref-N3203" class="csl-entry" role="doc-biblioentry">
[N3203] Jens Maurer. 2010-11-11. Tightening the conditions for
generating implicit moves. <a href="https://wg21.link/n3203"><div class="csl-block">https://wg21.link/n3203</div></a>
</div>
<div id="ref-N4950" class="csl-entry" role="doc-biblioentry">
[N4950] Thomas Köppe. 2023-05-10. Working Draft, Standard for
Programming Language C++. <a href="https://wg21.link/n4950"><div class="csl-block">https://wg21.link/n4950</div></a>
</div>
<div id="ref-P0174R2" class="csl-entry" role="doc-biblioentry">
[P0174R2] Alisdair Meredith. 2016-06-23. Deprecating Vestigial Library
Parts in C++17. <a href="https://wg21.link/p0174r2"><div class="csl-block">https://wg21.link/p0174r2</div></a>
</div>
<div id="ref-P0218R1" class="csl-entry" role="doc-biblioentry">
[P0218R1] Beman Dawes. 2016-03-05. Adopt File System TS for C++17. <a href="https://wg21.link/p0218r1"><div class="csl-block">https://wg21.link/p0218r1</div></a>
</div>
<div id="ref-P0270R3" class="csl-entry" role="doc-biblioentry">
[P0270R3] Hans Boehm. 2017-02-02. Removing C dependencies from signal
handler wording. <a href="https://wg21.link/p0270r3"><div class="csl-block">https://wg21.link/p0270r3</div></a>
</div>
<div id="ref-P0386R2" class="csl-entry" role="doc-biblioentry">
[P0386R2] Hal Finkel, Richard Smith. 2016-06-24. Inline Variables. <a href="https://wg21.link/p0386r2"><div class="csl-block">https://wg21.link/p0386r2</div></a>
</div>
<div id="ref-P0482R6" class="csl-entry" role="doc-biblioentry">
[P0482R6] Tom Honermann. 2018-11-09. char8_t: A type for UTF-8
characters and strings (Revision 6). <a href="https://wg21.link/p0482r6"><div class="csl-block">https://wg21.link/p0482r6</div></a>
</div>
<div id="ref-P0618R0" class="csl-entry" role="doc-biblioentry">
[P0618R0] Alisdair Meredith. 2017-03-02. Deprecating &lt;codecvt&gt;. <a href="https://wg21.link/p0618r0"><div class="csl-block">https://wg21.link/p0618r0</div></a>
</div>
<div id="ref-P0718R2" class="csl-entry" role="doc-biblioentry">
[P0718R2] Alisdair Meredith. 2017-11-10. Revising atomic_shared_ptr for
C++20. <a href="https://wg21.link/p0718r2"><div class="csl-block">https://wg21.link/p0718r2</div></a>
</div>
<div id="ref-P0767R1" class="csl-entry" role="doc-biblioentry">
[P0767R1] Jens Maurer. 2017-11-10. Deprecate POD. <a href="https://wg21.link/p0767r1"><div class="csl-block">https://wg21.link/p0767r1</div></a>
</div>
<div id="ref-P0768R1" class="csl-entry" role="doc-biblioentry">
[P0768R1] Walter E. Brown. 2017-11-10. Library Support for the Spaceship
(Comparison) Operator. <a href="https://wg21.link/p0768r1"><div class="csl-block">https://wg21.link/p0768r1</div></a>
</div>
<div id="ref-P0788R3" class="csl-entry" role="doc-biblioentry">
[P0788R3] Walter E. Brown. 2018-06-07. Standard Library Specification in
a Concepts and Contracts World. <a href="https://wg21.link/p0788r3"><div class="csl-block">https://wg21.link/p0788r3</div></a>
</div>
<div id="ref-P0806R2" class="csl-entry" role="doc-biblioentry">
[P0806R2] Thomas Köppe. 2018-06-04. Deprecate implicit capture of this
via [=]. <a href="https://wg21.link/p0806r2"><div class="csl-block">https://wg21.link/p0806r2</div></a>
</div>
<div id="ref-P0883R2" class="csl-entry" role="doc-biblioentry">
[P0883R2] Nicolai Josuttis. 2019-11-08. Fixing Atomic Initialization. <a href="https://wg21.link/p0883r2"><div class="csl-block">https://wg21.link/p0883r2</div></a>
</div>
<div id="ref-P0896R4" class="csl-entry" role="doc-biblioentry">
[P0896R4] Eric Niebler, Casey Carter, Christopher Di Bella. 2018-11-09.
The One Ranges Proposal. <a href="https://wg21.link/p0896r4"><div class="csl-block">https://wg21.link/p0896r4</div></a>
</div>
<div id="ref-P0966R1" class="csl-entry" role="doc-biblioentry">
[P0966R1] Mark Zeren, Andrew Luo. 2018-02-08. string::reserve Should Not
Shrink. <a href="https://wg21.link/p0966r1"><div class="csl-block">https://wg21.link/p0966r1</div></a>
</div>
<div id="ref-P1120R0" class="csl-entry" role="doc-biblioentry">
[P1120R0] Richard Smith. 2018-06-08. Consistency improvements for
&lt;=&gt; and other comparison operators. <a href="https://wg21.link/p1120r0"><div class="csl-block">https://wg21.link/p1120r0</div></a>
</div>
<div id="ref-P1152R4" class="csl-entry" role="doc-biblioentry">
[P1152R4] JF Bastien. 2019-07-22. Deprecating volatile. <a href="https://wg21.link/p1152r4"><div class="csl-block">https://wg21.link/p1152r4</div></a>
</div>
<div id="ref-P1252R2" class="csl-entry" role="doc-biblioentry">
[P1252R2] Casey Carter. 2019-02-22. Ranges Design Cleanup. <a href="https://wg21.link/p1252r2"><div class="csl-block">https://wg21.link/p1252r2</div></a>
</div>
<div id="ref-P1413R3" class="csl-entry" role="doc-biblioentry">
[P1413R3] CJ Johnson. 2021-11-22. Deprecate std::aligned_storage and
std::aligned_union. <a href="https://wg21.link/p1413r3"><div class="csl-block">https://wg21.link/p1413r3</div></a>
</div>
<div id="ref-P1787R6" class="csl-entry" role="doc-biblioentry">
[P1787R6] S. Davis Herring. 2020-10-28. Declarations and where to find
them. <a href="https://wg21.link/p1787r6"><div class="csl-block">https://wg21.link/p1787r6</div></a>
</div>
<div id="ref-P1815R2" class="csl-entry" role="doc-biblioentry">
[P1815R2] S. Davis Herring. 2020-02-14. Translation-unit-local entities.
<a href="https://wg21.link/p1815r2"><div class="csl-block">https://wg21.link/p1815r2</div></a>
</div>
<div id="ref-P1831R1" class="csl-entry" role="doc-biblioentry">
[P1831R1] JF Bastien. 2020-02-12. deprecating volatile: library. <a href="https://wg21.link/p1831r1"><div class="csl-block">https://wg21.link/p1831r1</div></a>
</div>
<div id="ref-P2327R1" class="csl-entry" role="doc-biblioentry">
[P2327R1] Paul M. Bendixen, Jens Maurer, Arthur O’Dwyer, Ben Saks.
2021-10-04. De-deprecating volatile compound operations. <a href="https://wg21.link/p2327r1"><div class="csl-block">https://wg21.link/p2327r1</div></a>
</div>
<div id="ref-P2340R1" class="csl-entry" role="doc-biblioentry">
[P2340R1] Thomas Köppe. 2021-06-11. Clarifying the status of the
<span>“C headers.”</span> <a href="https://wg21.link/p2340r1"><div class="csl-block">https://wg21.link/p2340r1</div></a>
</div>
<div id="ref-P2614R2" class="csl-entry" role="doc-biblioentry">
[P2614R2] Matthias Kretz. 2022-11-08. Deprecate
numeric_limits::has_denorm. <a href="https://wg21.link/p2614r2"><div class="csl-block">https://wg21.link/p2614r2</div></a>
</div>
<div id="ref-P2626R0" class="csl-entry" role="doc-biblioentry">
[P2626R0] Corentin Jabot. 2022-08-09. charN_t incremental adoption:
Casting pointers of UTF character types. <a href="https://wg21.link/p2626r0"><div class="csl-block">https://wg21.link/p2626r0</div></a>
</div>
<div id="ref-P2790R0" class="csl-entry" role="doc-biblioentry">
[P2790R0] Jonathan Wakely. 2023-02-13. C++ Standard Library Immediate
Issues to be moved in Issaquah, Feb. 2023. <a href="https://wg21.link/p2790r0"><div class="csl-block">https://wg21.link/p2790r0</div></a>
</div>
<div id="ref-P2864R2" class="csl-entry" role="doc-biblioentry">
[P2864R2] Alisdair Meredith. 2023-11-11. Remove Deprecated Arithmetic
Conversion on Enumerations From C++26. <a href="https://wg21.link/p2864r2"><div class="csl-block">https://wg21.link/p2864r2</div></a>
</div>
<div id="ref-P2865" class="csl-entry" role="doc-biblioentry">
[P2865] Alisdair Meredith. Remove Deprecated Array Comparisons from
C++26. <a href="https://wg21.link/p2865"><div class="csl-block">https://wg21.link/p2865</div></a>
</div>
<div id="ref-P2866" class="csl-entry" role="doc-biblioentry">
[P2866] Alisdair Meredith. Remove Deprecated Volatile Features From
C++26. <a href="https://wg21.link/p2866"><div class="csl-block">https://wg21.link/p2866</div></a>
</div>
<div id="ref-P2867" class="csl-entry" role="doc-biblioentry">
[P2867] Alisdair Meredith. Remove Deprecated strstreams From C++26. <a href="https://wg21.link/p2867"><div class="csl-block">https://wg21.link/p2867</div></a>
</div>
<div id="ref-P2868R3" class="csl-entry" role="doc-biblioentry">
[P2868R3] Alisdair Meredith. 2023-11-11. Remove Deprecated
<code class="sourceCode default">std::allocator</code> Typedef From
C++26. <a href="https://wg21.link/p2868r3"><div class="csl-block">https://wg21.link/p2868r3</div></a>
</div>
<div id="ref-P2869" class="csl-entry" role="doc-biblioentry">
[P2869] Alisdair Meredith. Remove Deprecated
<code class="sourceCode default">shared_ptr</code> Atomic Access APIs
From C++26. <a href="https://wg21.link/p2869"><div class="csl-block">https://wg21.link/p2869</div></a>
</div>
<div id="ref-P2870R3" class="csl-entry" role="doc-biblioentry">
[P2870R3] Alisdair Meredith. 2023-11-11. Remove
<code class="sourceCode default">basic_string::reserve()</code> From
C++26. <a href="https://wg21.link/p2870r3"><div class="csl-block">https://wg21.link/p2870r3</div></a>
</div>
<div id="ref-P2871R3" class="csl-entry" role="doc-biblioentry">
[P2871R3] Alisdair Meredith. 2023-11-11. Remove Deprecated Unicode
Conversion Facets From C++26. <a href="https://wg21.link/p2871r3"><div class="csl-block">https://wg21.link/p2871r3</div></a>
</div>
<div id="ref-P2872" class="csl-entry" role="doc-biblioentry">
[P2872] Alisdair Meredith. Remove
<code class="sourceCode default">wstring_convert</code> From C++26. <a href="https://wg21.link/p2872"><div class="csl-block">https://wg21.link/p2872</div></a>
</div>
<div id="ref-P2873" class="csl-entry" role="doc-biblioentry">
[P2873] Alisdair Meredith. Remove Deprecated Locale Category Facets For
Unicode from C++26. <a href="https://wg21.link/p2873"><div class="csl-block">https://wg21.link/p2873</div></a>
</div>
<div id="ref-P2874R1" class="csl-entry" role="doc-biblioentry">
[P2874R1] Alisdair Meredith. 2023-06-12. Mandating Annex D. <a href="https://wg21.link/p2874r1"><div class="csl-block">https://wg21.link/p2874r1</div></a>
</div>
<div id="ref-P2875" class="csl-entry" role="doc-biblioentry">
[P2875] Alisdair Meredith. Undeprecate
<code class="sourceCode default">polymorphic_allocator::destroy</code>
For C++26. <a href="https://wg21.link/p2875"><div class="csl-block">https://wg21.link/p2875</div></a>
</div>
<div id="ref-P2972R0" class="csl-entry" role="doc-biblioentry">
[P2972R0] Inbal Levi, Ben Craig, Fabio Fracassi, Corentin Jabot, Nevin
Liber, Billy Baker. 2023-09-18. 2023-09 Library Evolution Polls. <a href="https://wg21.link/p2972r0"><div class="csl-block">https://wg21.link/p2972r0</div></a>
</div>
<div id="ref-P2984R0" class="csl-entry" role="doc-biblioentry">
[P2984R0] Alisdair Meredith. 2023-10-15. Reconsider Redeclaring static
constexpr Data Members. <a href="https://wg21.link/p2984r0"><div class="csl-block">https://wg21.link/p2984r0</div></a>
</div>
<div id="ref-P3020R0" class="csl-entry" role="doc-biblioentry">
[P3020R0] Inbal Levi, Fabio Fracassi, Ben Craig, Billy Baker, Nevin
Liber, Corentin Jabot. 2023-10-15. 2023-09 Library Evolution Poll
Outcomes. <a href="https://wg21.link/p3020r0"><div class="csl-block">https://wg21.link/p3020r0</div></a>
</div>
<div id="ref-P3039R0" class="csl-entry" role="doc-biblioentry">
[P3039R0] David Stone. 2023-12-15. Automatically Generate
<code class="sourceCode default">operator-&gt;</code>. <a href="https://wg21.link/p3039r0"><div class="csl-block">https://wg21.link/p3039r0</div></a>
</div>
<div id="ref-P3047" class="csl-entry" role="doc-biblioentry">
[P3047] Alisdair Meredith. Remove Namespace relops From C++26. <a href="https://wg21.link/p3047r0"><div class="csl-block">https://wg21.link/p3047r0</div></a>
</div>
<div id="ref-P3053R0" class="csl-entry" role="doc-biblioentry">
[P3053R0] Inbal Levi, Fabio Fracassi, Ben Craig, Nevin Liber, Billy
Baker, Corentin Jabot. 2023-12-15. 2023-12 Library Evolution Polls. <a href="https://wg21.link/p3053r0"><div class="csl-block">https://wg21.link/p3053r0</div></a>
</div>
<div id="ref-P3054R0" class="csl-entry" role="doc-biblioentry">
[P3054R0] Inbal Levi, Fabio Fracassi, Ben Craig, Billy Baker, Nevin
Liber, Corentin Jabot. 2024-01-13. 2023-12 Library Evolution Poll
Outcomes. <a href="https://wg21.link/p3054r0"><div class="csl-block">https://wg21.link/p3054r0</div></a>
</div>
</div>
</div>
</div>
</body>
</html>
