<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 2843</TITLE>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<STYLE TYPE="text/css">
  INS { text-decoration:none; font-weight:bold; background-color:#A0FFA0 }
  .INS { text-decoration:none; background-color:#D0FFD0 }
  DEL { text-decoration:line-through; background-color:#FFA0A0 }
  .DEL { text-decoration:line-through; background-color: #FFD0D0 }
  @media (prefers-color-scheme: dark) {
    HTML { background-color:#202020; color:#f0f0f0; }
    A { color:#5bc0ff; }
    A:visited { color:#c6a8ff; }
    A:hover, a:focus { color:#afd7ff; }
    INS { background-color:#033a16; color:#aff5b4; }
    .INS { background-color: #033a16; }
    DEL { background-color:#67060c; color:#ffdcd7; }
    .DEL { background-color:#67060c; }
  }
  SPAN.cmnt { font-family:Times; font-style:italic }
</STYLE>
</HEAD>
<BODY>
<P><EM>This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21
  Core Issues List revision 118b.
  See http://www.open-std.org/jtc1/sc22/wg21/ for the official
  list.</EM></P>
<P>2025-09-28</P>
<HR>
<A NAME="2843"></A><H4>2843.
  
Undated reference to Unicode makes C++ a moving target
</H4>
<B>Section: </B>Clause 2&#160; [<A href="https://wg21.link/intro.refs">intro.refs</A>]
 &#160;&#160;&#160;

 <B>Status: </B>CD7
 &#160;&#160;&#160;

 <B>Submitter: </B>Jonathan Wakely
 &#160;&#160;&#160;

 <B>Date: </B>2024-01-05
  &#160;&#160;&#160;
  <B>Liaison: </B>LWG, EWG<BR>


<P>[Accepted as a DR at the June, 2025 meeting.]</P>



<P>Clause 2 [<A href="https://wg21.link/intro.refs#1.10">intro.refs</A>] paragraph 1.10 uses an undated reference for
the Unicode standard, meaning that a published (and otherwise frozen)
standard for C++ (e.g. C++23) will implicitly refer to a new revision
of the Unicode standard the moment such is issued:</P>

<BLOCKQUOTE>

... For undated references, the latest edition of the referenced document
(including any amendments) applies.

<UL>
<LI>...</LI>
<LI>The Unicode Consortium. The Unicode Standard. Available from:
<TT>https://www.unicode.org/versions/latest/</TT>
</LI>
</UL>

</BLOCKQUOTE>

<P>This situation is strictly worse than the lack of support for
certain scripts or languages, which can be rectified by updating the
reference to Unicode in the next revision of the C++ standard, as is
regularly done with any other missing language feature deemed worth
addressing.</P>

<P><U>Possible resolution [SUPERSEDED]:</U></P>

<P>Change in Clause 2 [<A href="https://wg21.link/intro.refs#1.10">intro.refs</A>] paragraph 1.10 as follows:</P>

<UL>
<LI>...</LI>
<LI>The Unicode Consortium. The Unicode Standard<INS>, Version 15.0</INS>. Available from:
<TT><DEL>https://www.unicode.org/versions/latest/</DEL><INS>https://www.unicode.org/versions/Unicode15.0.0/</INS></TT>
</LI>
</UL>

<P><B>Additional notes (January, 2024)</B></P>

<P>Forwarded to SG16 and LWG by decision of the CWG chair, via
<A HREF="https://github.com/cplusplus/papers/issues/1736">paper issue 1736</A>.</P>

<P><B>SG16 2024-01-10</B></P>

<P>SG16 has consensus to have a dated reference to Unicode in the
"Normative references", indicating a minimum version, and add
permission to implement an implementation-defined later version.</P>

<P><U>Possible resolution [SUPERSEDED]:</U></P>

<OL>
<LI>
<P>Change in Clause 2 [<A href="https://wg21.link/intro.refs#1.10">intro.refs</A>] paragraph 1.10 as follows:</P>

<UL>
<LI>...</LI>
<LI>The Unicode Consortium. The Unicode Standard<INS>, Version 15.0</INS>. Available from:
<TT><DEL>https://www.unicode.org/versions/latest/</DEL><INS>https://www.unicode.org/versions/Unicode15.0.0/</INS></TT>
</LI>
</UL>
</LI>

<LI>
<P>Add a paragraph before 4.1.1 [<A href="https://wg21.link/intro.compliance.general#8">intro.compliance.general</A>] paragraph 8 as follows:</P>

<BLOCKQUOTE>

<P class="ins">
A conforming implementation may implement an implementation-defined
version of the Unicode Standard that is a later version than the one
referenced in Clause 2 [<A href="https://wg21.link/intro.refs">intro.refs</A>].
</P>

<P>A conforming implementation may have extensions (including additional
library functions), provided they do not alter the behavior of any
well-formed program.</P>

</BLOCKQUOTE>
</LI>
</OL>

<P><B>CWG 2024-01-19</B></P>

<P>CWG took note of the issue.  No objections were raised regarding
the suggested direction.</P>

<P><B>EWG 2024-03-18</B></P>

<P>Allow implementation-defined Unicode version, but require at least
version 15.1.</P>

<P><U>Possible resolution [SUPERSEDED]:</U></P>

<OL>
<LI>
<P>Change in Clause 2 [<A href="https://wg21.link/intro.refs#1.10">intro.refs</A>] paragraph 1.10 as follows:</P>

<UL>
<LI>...</LI>
<LI>The Unicode Consortium. The Unicode Standard<INS>, Version 15.1</INS>. Available from:
<TT><DEL>https://www.unicode.org/versions/latest/</DEL><INS>https://www.unicode.org/versions/Unicode15.1.0/</INS></TT>
</LI>
</UL>
</LI>

<LI>
<P>Add a paragraph before 4.1.1 [<A href="https://wg21.link/intro.compliance.general#8">intro.compliance.general</A>] paragraph 8 as follows:</P>

<BLOCKQUOTE>

<P class="ins">
A conforming implementation may implement an implementation-defined
version of the Unicode Standard that is a later version than the one
referenced in Clause 2 [<A href="https://wg21.link/intro.refs">intro.refs</A>].
</P>

<P>A conforming implementation may have extensions (including additional
library functions), provided they do not alter the behavior of any
well-formed program.</P>

</BLOCKQUOTE>
</LI>
</OL>

<P><B>Additional notes (March, 2024)</B></P>

<P>More drafting to rebase Annex E on Unicode 15.1 is needed.</P>

<P><B>Additional notes (May, 2025)</B></P>

<P>See also P3727R0.</P>

<P><B>Proposed resolution (approved by CWG 2025-06-20):</B></P>

<OL>
<LI>
<P>Change in Clause 2 [<A href="https://wg21.link/intro.refs#1.10">intro.refs</A>] paragraph 1.10 as follows:</P>

<UL>
<LI>...</LI>
<LI>The Unicode Consortium. The Unicode Standard<INS>, Version 15.1</INS>. Available from:
<TT><DEL>https://www.unicode.org/versions/latest/</DEL><INS>https://www.unicode.org/versions/Unicode15.1.0/</INS></TT>
</LI>
</UL>
</LI>

<LI>
<P>Add a paragraph before 4.1.1 [<A href="https://wg21.link/intro.compliance.general#8">intro.compliance.general</A>] paragraph 8 as follows:</P>

<BLOCKQUOTE>

<P class="ins">
A conforming implementation may use an implementation-defined
version of the Unicode Standard that is a later version than the one
referenced in Clause 2 [<A href="https://wg21.link/intro.refs">intro.refs</A>].
</P>

<P>A conforming implementation may have extensions (including additional
library functions), provided they do not alter the behavior of any
well-formed program.</P>

</BLOCKQUOTE>
</LI>

<LI>
<P>Remove _N5008_.E.2.2 [<A href="https://wg21.link/uaxid.def.rfmt">uaxid.def.rfmt</A>]:</P>

<BLOCKQUOTE class="del">

<P>E.2.2 1 R1a Restricted format characters [uaxid.def.rfmt]</P>

<P>If an implementation of UAX #31 wishes to allow format characters
such as u+200d zero width joiner or u+200c zero width non-joiner it
must define a profile allowing them, or describe precisely which
combinations are permitted.</P>

<P>C++ does not allow format characters in identifiers, so this does
not apply.</P>

</BLOCKQUOTE>
</LI>
</OL>

<BR><BR>
</BODY>
</HTML>
