<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 3586: Formatting character alignment inconsistencies</title>
<meta property="og:title" content="Issue 3586: Formatting character alignment inconsistencies">
<meta property="og:description" content="C++ library issue. Status: New">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue3586.html">
<meta property="og:type" content="website">
<meta property="og:image" content="http://cplusplus.github.io/LWG/images/cpp_logo.png">
<meta property="og:image:alt" content="C++ logo">
<style>
  p {text-align:justify}
  li {text-align:justify}
  pre code.backtick::before { content: "`" }
  pre code.backtick::after { content: "`" }
  blockquote.note
  {
    background-color:#E0E0E0;
    padding-left: 15px;
    padding-right: 15px;
    padding-top: 1px;
    padding-bottom: 1px;
  }
  ins {background-color:#A0FFA0}
  del {background-color:#FFA0A0}
  table.issues-index { border: 1px solid; border-collapse: collapse; }
  table.issues-index th { text-align: center; padding: 4px; border: 1px solid; }
  table.issues-index td { padding: 4px; border: 1px solid; }
  table.issues-index td:nth-child(1) { text-align: right; }
  table.issues-index td:nth-child(2) { text-align: left; }
  table.issues-index td:nth-child(3) { text-align: left; }
  table.issues-index td:nth-child(4) { text-align: left; }
  table.issues-index td:nth-child(5) { text-align: center; }
  table.issues-index td:nth-child(6) { text-align: center; }
  table.issues-index td:nth-child(7) { text-align: left; }
  table.issues-index td:nth-child(5) span.no-pr { color: red; }
  @media (prefers-color-scheme: dark) {
     html {
        color: #ddd;
        background-color: black;
     }
     ins {
        background-color: #225522
     }
     del {
        background-color: #662222
     }
     a {
        color: #6af
     }
     a:visited {
        color: #6af
     }
     blockquote.note
     {
        background-color: rgba(255, 255, 255, .10)
     }
  }
</style>
</head>
<body>
<hr>
<p><em>This page is a snapshot from the LWG issues list, see the <a href="lwg-active.html">Library Active Issues List</a> for more information and the meaning of <a href="lwg-active.html#New">New</a> status.</em></p>
<h3 id="3586"><a href="lwg-active.html#3586">3586</a>. Formatting character alignment inconsistencies</h3>
<p><b>Section:</b> 28.5.2.2 <a href="https://wg21.link/format.string.std">[format.string.std]</a> <b>Status:</b> <a href="lwg-active.html#New">New</a>
 <b>Submitter:</b> Mark de Wever <b>Opened:</b> 2021-09-05 <b>Last modified:</b> 2021-12-04</p>
<p><b>Priority: </b>2
</p>
<p><b>View other</b> <a href="lwg-index-open.html#format.string.std">active issues</a> in [format.string.std].</p>
<p><b>View all other</b> <a href="lwg-index.html#format.string.std">issues</a> in [format.string.std].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#New">New</a> status.</p>
<p><b>Discussion:</b></p>
<p>
The alignment options specified in 28.5.2.2 <a href="https://wg21.link/format.string.std">[format.string.std]</a>, Table [tab:format.align] 
causes an inconsistency when formatting characters. The output differs depending on whether 
an integer is formatted using a character presentation type or when using a character directly:
</p>
<blockquote><pre>
format("{:3}", '*'); -&gt; "*  " <i>// aligned at the start of the available space</i>
format("{:3c}", 42); -&gt; "  *" <i>// aligned at the end of the available space</i>
</pre></blockquote>
<p>
I expect both calls to return the same value: <code>"*  "</code>. The current wording
mixes the type and the presentation type. To me, it seems clearer to adjust to wording 
to only use the presentation type. Another approach would be adjusting the wording to 
add an exception when an integer type uses the character presentation.
</p>

<p><i>[2021-09-20; Reflector poll]</i></p>

<p>
Set priority to 2 after reflector poll.
</p>
<p>
Victor said "It mostly looks correct but I think the wording needs a bit more
work because we don't mention arithmetic presentation types anywhere."
</p>


<p><i>[2021-11-29; Daniel comments]</i></p>

<p>
This issue touches the same wording area as LWG <a href="lwg-active.html#3644" title="std::format does not define &quot;integer presentation type&quot; (Status: New)">3644</a><sup><a href="https://cplusplus.github.io/LWG/issue3644" title="Latest snapshot">(i)</a></sup> does.
</p>


<p id="res-3586"><b>Proposed resolution:</b></p>
<p>
This wording is relative to <a href="https://wg21.link/N4892" title=" Working Draft, Standard for Programming Language C++">N4892</a>.
</p>

<ol>
<li><p>Modify 28.5.2.2 <a href="https://wg21.link/format.string.std">[format.string.std]</a>, Table [tab:format.align], as indicated:</p>

<blockquote>
<table border="1">
<caption>Table 59 &mdash; Meaning of <i>align</i> options  [tab:format.align]</caption>
<tr style="text-align:center">
<th>Option</th>
<th>Meaning</th>
</tr>
<tr>
<td><code>&lt;</code></td>
<td>Forces the field to be aligned to the start of the available space. This is the default <ins>when 
the presentation type is a non-arithmetic type</ins><del>for non-arithmetic types, <code>charT</code>, and 
<code>bool</code>, unless an integer presentation type is specified</del>.</td>
</tr>
<tr>
<td><code>&gt;</code></td>
<td>Forces the field to be aligned to the end of the available space. This is the default <ins>when 
the presentation type is an arithmetic type</ins><del>for arithmetic types other than <code>charT</code> 
and <code>bool</code> or when an integer presentation type is specified</del>.</td>
</tr>
<tr>
<td colspan="2" align="center">
<code>[&hellip;]</code>
</td>
</tr>
</table>
</blockquote>
</li>
</ol>





</body>
</html>
