This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

### 2983. `money_put::do_put` underspecified

Section: 28.4.7.3.2 [locale.money.put.virtuals] Status: New Submitter: Jonathan Wakely Opened: 2017-06-21 Last modified: 2017-06-27

Priority: 3

View all other issues in [locale.money.put.virtuals].

View all issues with New status.

Discussion:

Whether you get "`.99`" or "`0.99`" for the following depends on the implementation:

>     std::cout.imbue(std::locale("en_US"));
>     std::cout << std::put_money(99.L);

I don't see any justification in [locale.money.put.virtuals] for the leading `0`, although that seems more useful.

If we want the leading zero, we should say so.

[2017-06-27, Jonathan comments and provides wording]

I suggest that we require a leading zero. The wording below is similar to how C specifies the `%f` format specifier for `fprintf`.

Proposed resolution:

This wording is relative to N4659.

1. Edit 28.4.7.3.2 [locale.money.put.virtuals] as indicated:

   >     iter_type do_put(iter_type s, bool intl, ios_base& str,
   >                      char_type fill, long double units) const;
   >     iter_type do_put(iter_type s, bool intl, ios_base& str,
   >                      char_type fill, const string_type& digits) const;

   > > […]

   > > -2- Remarks: The currency symbol is generated if and only if `(str.flags() & str.showbase)` is nonzero. If the format specifies a decimal point, at least one digit character appears before it. If the number of characters generated for the specified format is less than the value returned by `str.width()` on entry to the function, then copies of `fill` are inserted as necessary to pad to the specified width. For the value `af` equal to `(str.flags() & str.adjustfield)`, if `(af == str.internal)` is `true`, the fill characters are placed where `none` or `space` appears in the formatting pattern; otherwise if `(af == str.left)` is `true`, they are placed after the other characters; otherwise, they are placed before the other characters.