### 3250. `std::format`: `#` (alternate form) for NaN and inf

**Section:** 22.14.2.2 [format.string.std] **Status:** C++20
**Submitter:** Richard Smith **Opened:** 2019-08-05 **Last modified:** 2021-02-25 10:48:01 UTC

**Priority: **0

**View other** active issues in [format.string.std].

**View all other** issues in [format.string.std].

**View all issues with** C++20 status.

**Discussion:**

We have:

"For floating-point numbers, the alternate form causes the result of the conversion to always contain a decimal-point character, even if no digits follow it."

So does that mean that infinity is formatted as `"inf."` and NaN as `"nan."`? (Or
something like that? Where exactly do we add the decimal point in this case?) Or does this
affect infinity but not NaN (because we can handwave that a NaN value is not a
"floating-point number")?

I suspect that this should only cover finite floating-point numbers.

**Victor Zverovich:**

Right. So infinity and NaN should be still formatted as `"inf"` and `"nan"`
without a decimal point.

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

**Proposed resolution:**

This wording is relative to N4830.

Modify 22.14.2.2 [format.string.std] as indicated:

-6- […] For floating-point types, the alternate form causes the result of the conversion
of finite values to always contain a decimal-point character, even if no digits follow
it. Normally, a decimal-point character appears in the result of these conversions only if a digit
follows it. In addition, for `g` and `G` conversions, trailing zeros are not removed
from the result.