std::format
and negative zeroesSection: 28.5.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.)
"+"
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.
Modify the sign options Table [tab:format.sign] in 28.5.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.
Modify the sign options Table [tab:format.sign] in 28.5.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 onlyfor 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.