<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:"Yu Gothic";
        panose-1:2 11 4 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@Yu Gothic";
        panose-1:2 11 4 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";
        color:black;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Sorry, I added Titus to ask if we need to talk about this in SD-8 somehow.</p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Billy3</p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div style="mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:lib-ext@lists.isocpp.org">Billy O'Neal (VC LIBS) via Lib-Ext</a><br>
<b>Sent: </b>Tuesday, November 12, 2019 1:14 PM<br>
<b>To: </b><a href="mailto:tom@honermann.net">Tom Honermann</a>; <a href="mailto:lib-ext@lists.isocpp.org">
lib-ext@lists.isocpp.org</a>; <a href="mailto:corentin.jabot@gmail.com">Corentin</a>;
<a href="mailto:titus@google.com">Titus Winters</a><br>
<b>Cc: </b><a href="mailto:bion@microsoft.com">Billy O'Neal (VC LIBS)</a>; <a href="mailto:victor.zverovich@gmail.com">
Victor Zverovich</a>; <a href="mailto:lib@lists.isocpp.org">lib@lists.isocpp.org</a>;
<a href="mailto:unicode@open-std.org">SG16</a><br>
<b>Subject: </b>Re: [isocpp-lib-ext] The &quot;Let's Stop Ascribing Meaning to Code Points&quot; blog post</p>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">I haven’t seen how customers will use this API enough to go so far as make the statement “implementers aren’t going to be willing to change […]” at this time. It is certainly a possibility. Changes to that table are breaking changes. Whether
 we’re going to be willing to make such changes is a value judgement on potential breaks vs. such benefit that might be attained from those breaks.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">&gt; I take it your concern is regarding code that calls std::format_to with an assumption that the provided output buffer is large enough?<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">More or less, yes. Certainly we see people do that with sprintf today.<o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">Billy3 <o:p></o:p></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From: </b><a href="mailto:tom@honermann.net">Tom Honermann</a><br>
<b>Sent: </b>Tuesday, November 12, 2019 1:09 PM<br>
<b>To: </b><a href="mailto:bion@microsoft.com">Billy O'Neal (VC LIBS)</a>; <a href="mailto:lib-ext@lists.isocpp.org">
lib-ext@lists.isocpp.org</a>; <a href="mailto:corentin.jabot@gmail.com">Corentin</a><br>
<b>Cc: </b><a href="mailto:lib@lists.isocpp.org">lib@lists.isocpp.org</a>; <a href="mailto:unicode@open-std.org">
SG16</a>; <a href="mailto:victor.zverovich@gmail.com">Victor Zverovich</a><br>
<b>Subject: </b>Re: [isocpp-lib-ext] The &quot;Let's Stop Ascribing Meaning to Code Points&quot; blog post<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<p class="MsoNormal">If implementors aren't going to be willing to change these tables once we ship, then I think we have a fairly serious issue.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Some have adamantly stated that these widths are estimates only and should not be counted on to remain stable.&nbsp; Code that is sensitive to the formatted size of the output should be calling std::formatted_size and allocating appropriately.&nbsp;
 I take it your concern is regarding code that calls std::format_to with an assumption that the provided output buffer is large enough?&nbsp; (or, code that calls std::format and assumes the size of the resulting std::string).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">Tom.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">On 11/12/19 8:58 PM, Billy O'Neal (VC LIBS) wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal">My only point was that the specified behavior gives grapheme clusters a width of 1 or 2, but there exist characters like U&#43;FDFD that are wider than 2. (And many that have a width of 0) I would be very nervous about changing the constants
 used after std::format ships because that could introduce unexpected buffer overruns or underruns in user programs. This is the kind of thing that becomes contractual very quickly (which is one of the reasons I was weakly against trying to open this can of
 worms).<o:p></o:p></p>
<p class="MsoNormal">&nbsp;<o:p></o:p></p>
<p class="MsoNormal">Billy3<o:p></o:p></p>
<p class="MsoNormal">&nbsp;<o:p></o:p></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From: </b><a href="mailto:tom@honermann.net">Tom Honermann</a><br>
<b>Sent: </b>Tuesday, November 12, 2019 12:53 PM<br>
<b>To: </b><a href="mailto:lib-ext@lists.isocpp.org">lib-ext@lists.isocpp.org</a>;
<a href="mailto:corentin.jabot@gmail.com">Corentin</a><br>
<b>Cc: </b><a href="mailto:bion@microsoft.com">Billy O'Neal (VC LIBS)</a>; <a href="mailto:lib@lists.isocpp.org">
lib@lists.isocpp.org</a>; <a href="mailto:unicode@open-std.org">SG16</a>; <a href="mailto:victor.zverovich@gmail.com">
Victor Zverovich</a><br>
<b>Subject: </b>Re: [isocpp-lib-ext] The &quot;Let's Stop Ascribing Meaning to Code Points&quot; blog post<o:p></o:p></p>
</div>
<p class="MsoNormal">&nbsp;<o:p></o:p></p>
<p class="MsoNormal"><span style="color:black">On 11/12/19 6:11 PM, Billy O'Neal (VC LIBS) via Lib-Ext wrote:</span><o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="color:black">It came up in the context of that width thing in format and I was asking if I had permission to make wider-than-2 characters format properly, and the forwarded text doesn’t seem to allow that (which is OK, I just
 wanted to understand at the time); I was thinking of U&#43;FDFD (﷽).</span><o:p></o:p></p>
</blockquote>
<p>Can you elaborate?&nbsp; My understanding of the forwarded wording is that the assumed encoding for the input text is implementation defined (though not locale sensitive) and that implementors are encouraged to use the Unicode code point ranges indicated in the
 wording, but are not required to (that is my interpretation of the use of the word &quot;should&quot; in the proposed wording).</p>
<p>It does look like the provided code point ranges don't handle U&#43;FDFD correctly.</p>
<p>I don't know how much confidence should be placed on the listed code point ranges.&nbsp; But I think it is important that we consider them amenable to change.&nbsp; I suspect that U&#43;FDFD is not the last code point we'll find that is not correctly handled.</p>
<p>Tom.</p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span style="color:black">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black">Billy3</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black">&nbsp;</span><o:p></o:p></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="color:black">From: </span></b><span style="color:black"><a href="mailto:corentin.jabot@gmail.com">Corentin</a><br>
<b>Sent: </b>Tuesday, November 12, 2019 8:42 AM<br>
<b>To: </b><a href="mailto:lib-ext@lists.isocpp.org">C&#43;&#43; Library Evolution Working Group</a><br>
<b>Cc: </b><a href="mailto:lib@lists.isocpp.org">lib@lists.isocpp.org</a>; <a href="mailto:bion@microsoft.com">
Billy O'Neal (VC LIBS)</a>; <a href="mailto:unicode@open-std.org">SG16</a><br>
<b>Subject: </b>Re: [isocpp-lib-ext] The &quot;Let's Stop Ascribing Meaning to Code Points&quot; blog post</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black">&nbsp;</span><o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><span style="color:black">On Tue, 12 Nov 2019 at 16:58, Billy O'Neal (VC LIBS) via Lib-Ext &lt;<a href="mailto:lib-ext@lists.isocpp.org">lib-ext@lists.isocpp.org</a>&gt; wrote:</span><o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:2.7in">
<span style="color:black">During review of some Unicode stuff in LWG we had a mini discussion for some folks about grapheme clusters and I mentioned everyone who touches this stuff might understand the complexities better if they read this:</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:2.7in">
<span style="color:black">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:2.7in">
<span style="color:black"><a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmanishearth.github.io%2Fblog%2F2017%2F01%2F14%2Fstop-ascribing-meaning-to-unicode-code-points%2F&amp;data=02%7C01%7Cbion%40microsoft.com%7C325ed688adf24821865508d767b55bf1%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637091900938888858&amp;sdata=n6PWmt9higWO%2BDgRCopDQLf8huNNtXtLaPEOSnX4Lds%3D&amp;reserved=0" target="_blank">https://manishearth.github.io/blog/2017/01/14/stop-ascribing-meaning-to-unicode-code-points/</a></span><o:p></o:p></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="color:black">&nbsp;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">&#43;1</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">FYI SG-16 is aware of that blog post and i think there is a pretty strong agreement with&nbsp;it.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">Codepoints have some use (notably the Unicode Character Database is really the Unicode Codepoint Database, and most Unicode algorithms works on codepoints), but any kind of user facing UX should deal with EGCS.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">It is not always what applications choose to do for&nbsp;a variety of reasons. Notably Twitter character counts deals in codepoints, web browsers search&nbsp;function&nbsp;use codepoints as to ignore diacritics, and comparisons
 can be done on (normalized)&nbsp; codepoint sequences.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">&nbsp;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">There is also not always a 1-1 mapping between what people understand as &quot;character&quot;, grapheme clusters and glyphes.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black">&nbsp;</span><o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:2.7in">
<span style="color:black">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:2.7in">
<span style="color:black">Billy3</span><o:p></o:p></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal" style="margin-left:184.8pt"><span style="color:black">_______________________________________________<br>
Lib-Ext mailing list<br>
<a href="mailto:Lib-Ext@lists.isocpp.org" target="_blank">Lib-Ext@lists.isocpp.org</a><br>
Subscription: <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.isocpp.org%2Fmailman%2Flistinfo.cgi%2Flib-ext&amp;data=02%7C01%7Cbion%40microsoft.com%7C325ed688adf24821865508d767b55bf1%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637091900938898848&amp;sdata=Inj6zKImFUHAzMuOG9XGDnFNaV0sk4oqowibQ0AIF4E%3D&amp;reserved=0" target="_blank">
https://lists.isocpp.org/mailman/listinfo.cgi/lib-ext</a><br>
Link to this post: <a href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.isocpp.org%2Flib-ext%2F2019%2F11%2F13606.php&amp;data=02%7C01%7Cbion%40microsoft.com%7C325ed688adf24821865508d767b55bf1%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637091900938898848&amp;sdata=65O8kixjxGs7UKCX8%2Fb1yHuVj41a3hr0VcSHiTsTdpw%3D&amp;reserved=0" target="_blank">
http://lists.isocpp.org/lib-ext/2019/11/13606.php</a></span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black">&nbsp;</span><o:p></o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="color:black"><br>
<br>
</span><o:p></o:p></p>
<pre>_______________________________________________</pre>
<pre>Lib-Ext mailing list</pre>
<pre><a href="mailto:Lib-Ext@lists.isocpp.org">Lib-Ext@lists.isocpp.org</a></pre>
<pre>Subscription: <a href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.isocpp.org%2Fmailman%2Flistinfo.cgi%2Flib-ext&amp;data=02%7C01%7Cbion%40microsoft.com%7C325ed688adf24821865508d767b55bf1%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637091900938908847&amp;sdata=Qbrmymcetx9msnXGCnfQGmT39hiiscI2Sjha97S80c8%3D&amp;reserved=0">https://lists.isocpp.org/mailman/listinfo.cgi/lib-ext</a></pre>
<pre>Link to this post: <a href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.isocpp.org%2Flib-ext%2F2019%2F11%2F13609.php&amp;data=02%7C01%7Cbion%40microsoft.com%7C325ed688adf24821865508d767b55bf1%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637091900938908847&amp;sdata=bfw5Bj%2Fa5Fy5DFjo%2BAwWX4mNJRl0%2B8GWdDL5r0HwKm0%3D&amp;reserved=0">http://lists.isocpp.org/lib-ext/2019/11/13609.php</a></pre>
</blockquote>
<p>&nbsp;</p>
<p class="MsoNormal"><span style="color:black">&nbsp;</span><o:p></o:p></p>
</blockquote>
<p><o:p>&nbsp;</o:p></p>
<p class="MsoNormal"><span style="color:black"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
</body>
</html>