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

### 3243. `std::format` and negative zeroes

Section: 20.20.2 [format.string] Status: C++20 Submitter: Richard Smith Opened: 2019-07-31 Last modified: 2021-02-25

Priority: 2

View all other issues in [format.string].

View all issues with C++20 status.

Discussion:

What are these:

>     std::format("{}", -0.0);
>     std::format("{:+}", -0.0);
>     std::format("{:-}", -0.0);
>     std::format("{: }", -0.0);

with

>     "{:{}} {}"

A negative zero is not a negative number, so I think the answer for an implementation that supports signed zeroes is `"0"`, `"-0"`, `"0"`, `" 0"`. Is that the intent? (Note that this doesn't satisfy `to_chars`' round-trip guarantee.)

Or should the behavior actually be that `"+"` means "insert a leading `+` if `to_chars`' output does not start with `-"` and `" "` actually means "insert a leading space if `to_chars`' output does not start with `-"` (that is, the same as `"%+f"` and `"% f"`) — so that the result of all four calls is `"-0"`?

Victor Zverovich:

The latter. `std::format` is specified in terms of `to_chars` and the intent is to have similar round trip guarantee here, so the result should be `"-0"`, `"-0"`, `"-0"`, `"-0"`. This has also been extensively discussed in LEWG and the outcome of that discussion was to print `'-'` for negative zeros.

So I think it should be clarified that `'-'` and space apply to negative numbers and negative zero.

[2019-08-17 Priority set to 2 based on reflector discussion]

Previous resolution [SUPERSEDED]:

> This wording is relative to N4830.

> 1. Modify the sign options Table [tab:format.sign] in 20.20.2.2 [format.string.std] as indicated:

>    > Table 59: Meaning of sign options [tab:format.sign]
>    > Option | Meaning
>    > --- | ---
>    > `'+'` | Indicates that a sign should be used for both non-negative and negative numbers.
>    > `'-'` | Indicates that a sign should be used only for negative numbers and negative zero (this is the default behavior).
>    > space | Indicates that a leading space should be used for non-negative numbers other than negative zero, and a minus sign for negative numbers and negative zero.

[2020-02-13, Prague]

Rebased and some wording finetuning by LWG.

[2020-02 Status to Immediate on Thursday night in Prague.]

Proposed resolution:

This wording is relative to N4849.

1. Modify the sign options Table [tab:format.sign] in 20.20.2.2 [format.string.std] as indicated:

   > Table 58: Meaning of sign options [tab:format.sign]
   > Option | Meaning
   > --- | ---
   > `'+'` | Indicates that a sign should be used for both non-negative and negative numbers.
   > `'-'` | Indicates that a sign should be used only for negative numbers and negative zero only (this is the default behavior).
   > space | Indicates that a leading space should be used for non-negative numbers other than negative zero, and a minus sign for negative numbers and negative zero.