<html>

<head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style>
body
{
  font-family: arial, sans-serif;
  max-width: 6.75in;
  margin: 0px auto;
  font-size: 85%;
}
 ins  {background-color: #CCFFCC; text-decoration: none;}
 del  {background-color: #FFCACA; text-decoration: none;}
 pre  {background-color: #D7EEFF; font-size: 95%; font-family: "courier new", courier, serif;}
 code {font-family: "courier new", courier, serif;}
 table {font-size: 90%;}
</style>
<title>ISO 10646:2014</title>
</head>

<body>
<table>
<tr>
  <td align="left">Doc. no.:</td>
  <td align="left">P0417R0</td>
</tr>
<tr>
  <td align="left">Date:</td>
  <td align="left">
  <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y-%m-%d" startspan -->2016-07-13<!--webbot bot="Timestamp" endspan i-checksum="12461" --></td>
</tr>
<tr>
  <td align="left">Reply to:</td>
  <td align="left">Beman Dawes &lt;bdawes at acm dot org&gt;
</tr>
<tr>
  <td align="left">Audience:</td>
  <td align="left">Core, Library</td>
</tr>
</table>

<h1>C++17 should refer to ISO/IEC 10646 2014 instead of 1994</h1>

<p>ISO standards are only supposed to have normative references to the 
latest version of other ISO standards, yet the C++17 CD still refers to <i>ISO/IEC 10646-1:1993, Information 
technology — Universal Multiple-Octet Coded Character Set (UCS)— Part 1: 
Architecture and Basic Multilingual Plane</i>.</p>

<p>There have been three revisions and numerous amendments of 10646 since 1994. 
The changes that impact the C++17 CD include:</p>

<ul>
  <li>The name has changed to <i>Information technology — Universal Coded 
  Character Set (UCS)</i>.</li>
  <li>UTF-8, UTF-16, and UTF-32 are now defined. They were not even a part of 
  10646:1994 before amendments, so the C++ standard has been using the terms 
  without a normative definition.</li>
  <li>UCS-2 has been deprecated, and has been replaced by UTF-16. This is a 
  normative change for the C++ standard because UCS-2 and UTF-16 are not the 
  same.</li>
  <li>The term UCS-4 has been changed to UTF-32. Although 10646 says &quot;The terms 
  UTF-32 and UCS-4 can be used interchangeably...&quot;, the C++ standard should use 
  the preferred term UTF-32 throughout.</li>
  <li>New characters have been added. Annex E needs to be updated accordingly.</li>
</ul>

<p>See 
<a href="http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html">http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html</a> 
for a copy of ISO/IEC 10646:2014.</p>

<h2>Proposed changes</h2>

<p><i>Strike the wording <del>high-lighted in red</del> and add the wording <ins>high-lighted in 
green</ins>.</i></p>

<h3>1.2 Normative references [intro.refs]</h3>

<p>— ISO/IEC 10646<del>-1:1993, <i>Information technology — Universal 
Multiple-Octet Coded Character Set (UCS)</i> — Part 1: Architecture and Basic 
Multilingual Plane</del> <ins>:2014, <i>Information technology — Universal Coded 
Character Set (UCS)</i></ins></p>

<h3>22.5 Standard code conversion facets [locale.stdcvt]</h3>

<p>For the facet <code>codecvt_utf8</code>:</p>

<blockquote>

<p>— The facet shall convert between UTF-8 multibyte sequences and 
<del>UCS2</del> <ins>UTF-16</ins> or <del>UCS4</del> <ins>UTF-32</ins> (depending on the size
of Elem) within the program.</p>

</blockquote>

<p>...</p>

<p>For the facet <code>codecvt_utf16:</code></p>

<blockquote>

<p>— The facet shall convert between UTF-16 multibyte sequences and 
<del>UCS2</del> <ins>UTF-16</ins> or <del>UCS4</del> <ins>UTF-32</ins> 
(depending on the size of Elem) within the program.</p>

</blockquote>

<h3>E.1 Ranges of characters allowed [charname.allowed]</h3>

<p>10000-1FFFD, 20000-2FFFD, 30000-3FFFD, 40000-4FFFD, 50000-5FFFD,<br>
&nbsp;&nbsp;&nbsp; 60000-6FFFD, 70000-7FFFD, 80000-8FFFD, 90000-9FFFD, 
A0000-AFFFD,<br>
&nbsp;&nbsp;&nbsp; B0000-BFFFD, C0000-CFFFD, D0000-DFFFD, E0000-EFFFD<ins>, F0000-FFFFD,</ins><br>
&nbsp;&nbsp;&nbsp; <ins>100000-10FFFD</ins></p>

<hr>

<p><br>
&nbsp;</p>

</body>

</html>