<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 668: money_get's empty minus sign</title>
<meta property="og:title" content="Issue 668: money_get's empty minus sign">
<meta property="og:description" content="C++ library issue. Status: NAD">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue668.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#NAD">NAD</a> status.</em></p>
<h3 id="668"><a href="lwg-closed.html#668">668</a>. <code>money_get</code>'s empty minus sign</h3>
<p><b>Section:</b> 28.3.4.7.2.3 <a href="https://wg21.link/locale.money.get.virtuals">[locale.money.get.virtuals]</a> <b>Status:</b> <a href="lwg-active.html#NAD">NAD</a>
 <b>Submitter:</b> Thomas Plum <b>Opened:</b> 2007-04-16 <b>Last modified:</b> 2016-01-28</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View all other</b> <a href="lwg-index.html#locale.money.get.virtuals">issues</a> in [locale.money.get.virtuals].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#NAD">NAD</a> status.</p>
<p><b>Discussion:</b></p>
<p>
28.3.4.7.2.3 <a href="https://wg21.link/locale.money.get.virtuals">[locale.money.get.virtuals]</a>, para 3 says:
</p>

<blockquote><p>
If <code>pos</code> or <code>neg</code> is empty, the sign component is
optional, and if no sign is detected, the result is given the sign
that corresponds to the source of the empty string.
</p></blockquote>

<p>
The following objection has been raised:
</p>

<blockquote><p>
A <code>negative_sign</code> of "" means "there is no
way to write a negative sign" not "any null sequence is a negative
sign, so it's always there when you look for it".
</p></blockquote>

<p>
[Plum ref _222612Y32]
</p>

<p><i>[
Kona (2007): Bill to provide proposed wording and interpretation of existing wording.
]</i></p>


<p>
Related to <a href="lwg-closed.html#669" title="Equivalent postive and negative signs in money_get (Status: NAD)">669</a><sup><a href="https://cplusplus.github.io/LWG/issue669" title="Latest snapshot">(i)</a></sup>.
</p>

<p><i>[
2009-05-17 Howard adds:
]</i></p>


<blockquote>
<p>
I disagree that a <code>negative_sign</code> of "" means "there is no way to
write a negative sign".  The meaning requires the sentences of 28.3.4.7.2.3 <a href="https://wg21.link/locale.money.get.virtuals">[locale.money.get.virtuals]</a> p3 following that quoted above to be
taken into account:
</p>

<blockquote><p>
-3- ... If <code>pos</code> or <code>neg</code> is empty, the sign component is
optional, and if no sign is detected, the result is given the sign that
corresponds to the source of the empty string. Otherwise, the character
in the indicated position must match the first character of <code>pos</code>
or <code>neg</code>, and the result is given the corresponding sign. If the
first character of <code>pos</code> is equal to the first character of
<code>neg</code>, or if both strings are empty, the result is given a
positive sign.
</p></blockquote>

<p>
So a <code>negative_sign</code> of "" means "there is no way to write a
negative sign" only when <code>positive_sign</code> is also "".  However
when <code>negative_sign</code> is "" and <code>postive_sign.size() &gt;
0</code>, then one writes a negative value by not writing the
<code>postive_sign</code> in the position indicated by
<code>money_base::sign</code>.
For example:
</p>

<blockquote><pre>
pattern = {symbol, sign, value, none}
positive_sign = "+"
negative_sign = ""
$123   // a negative value, using optional sign
$+123  // a positive value
$-123  // a parse error
</pre></blockquote>

<p>
And:
</p>

<blockquote><pre>
pattern = {symbol, sign, value, none}
positive_sign = ""
negative_sign = ""
$123   // a positive value, no sign possible
$+123  // a parse error
$-123  // a parse error
</pre></blockquote>


<p>
And (regarding <a href="lwg-closed.html#669" title="Equivalent postive and negative signs in money_get (Status: NAD)">669</a><sup><a href="https://cplusplus.github.io/LWG/issue669" title="Latest snapshot">(i)</a></sup>):
</p>

<blockquote><pre>
pattern = {symbol, sign, value, none}
positive_sign = "-"
negative_sign = "-"
$123   // a parse error, sign is mandatory
$+123  // a parse error
$-123  // a positive value
</pre></blockquote>


<p>
The text seems both unambiguous and clear to me.  I recommend NAD for
both this issue and <a href="lwg-closed.html#669" title="Equivalent postive and negative signs in money_get (Status: NAD)">669</a><sup><a href="https://cplusplus.github.io/LWG/issue669" title="Latest snapshot">(i)</a></sup>.  However I would have no
objection to adding examples such as those above.
</p>
</blockquote>

<p><i>[
Batavia (2009-05):
]</i></p>

<blockquote>
<p>
This discussion applies equally to issue <a href="lwg-closed.html#669" title="Equivalent postive and negative signs in money_get (Status: NAD)">669</a><sup><a href="https://cplusplus.github.io/LWG/issue669" title="Latest snapshot">(i)</a></sup> (q.v.).
Howard has added examples above,
and recommends either NAD or a resolution that adds his (or similar) examples
to the Working Paper.
</p>
<p>
Alan would like to rewrite paragraph 3.
</p>
<p>
We recommend moving to NAD.
Anyone who feels strongly about adding the examples
is invited to submit corresponding wording.
We further recommend issue <a href="lwg-closed.html#669" title="Equivalent postive and negative signs in money_get (Status: NAD)">669</a><sup><a href="https://cplusplus.github.io/LWG/issue669" title="Latest snapshot">(i)</a></sup> be handled identically.
</p>
</blockquote>

<p><i>[
2009-07-14 Alan reopens with improved wording.
]</i></p>


<p><i>[
2009-07 Frankfurt
]</i></p>


<blockquote><p>
No consensus for closing as NAD.  Leave in Review.
</p></blockquote>

<p><i>[
2009-10 Santa Cruz:
]</i></p>


<blockquote><p>
NAD.  Agreed that the original assessment as NAD was correct.
</p></blockquote>



<p id="res-668"><b>Proposed resolution:</b></p>
<p>
Change 28.3.4.7.2.3 <a href="https://wg21.link/locale.money.get.virtuals">[locale.money.get.virtuals]</a> p3:
</p>

<blockquote><p>
-3- <del>If the first character (if any) in the string pos returned by
<code>mp.positive_sign()</code> or the string <code>neg</code> returned by
<code>mp.negative_sign()</code> is recognized in the position indicated by
sign in the format pattern, it is consumed and any remaining characters
in the string are required after all the other format components.
[<i>Example:</i> If <code>showbase</code> is off, then for a <code>neg</code>
value of "()" and a currency symbol of "L", in "(100 L)" the "L" is
consumed; but if <code>neg</code> is "-", the "L" in "-100 L" is not
consumed. -- <i>end example</i>] If <code>pos</code> or <code>neg</code> is
empty, the sign component is optional, and if no sign is detected, the
result is given the sign that corresponds to the source of the empty
string. Otherwise, the character in the indicated position must match
the first character of <code>pos</code> or <code>neg</code>, and the result is
given the corresponding sign. If the first character of <code>pos</code> is
equal to the first character of <code>neg</code>, or if both strings are
empty, the result is given a positive sign.</del>

<ins>The sign pattern strings <code>pos</code> and <code>neg</code> are returned by
<code>mp.positive_sign()</code> and <code>mp.negative_sign()</code> respectively. A sign pattern
is matched if its first character is recognized in <code>s</code> in the position
indicated by <code>sign</code> in the format pattern, or if the pattern is empty and
there is no sign recognized in <code>s</code>. A match is required to occur. If both
patterns are matched, the result is given a positive sign, otherwise the
result is given the sign corresponding to the matched pattern. 
If the pattern contains more than one character, the characters after the first 
must be matched in <code>s</code> after all other format components. 
If any sign
characters are matched, <code>s</code> is consumed up to and including those characters.
[<i>Example:</i> If <code>showbase</code> is off, then for a <code>neg</code>
value of "<code>()</code>" and a currency symbol of "<code>L</code>", in
"<code>(100 L)</code>" the entire string is consumed; but for a <code>neg</code>
value of "<code>-</code>", in "<code>-100 L</code>", the string is consumed
through the second "<code>0</code>" (the space and "<code>L</code>" are not consumed). &mdash; <i>end
example</i>] </ins>
</p></blockquote>





</body>
</html>
