153 views

Skip to first unread message

Mar 11, 2020, 3:08:43 AM3/11/20

to std-pr...@isocpp.org

It's standard behaviour that the token 42f is ill-formed and not a floating-point literal:

** digit-sequence float-floating-point-suffix**

** float-floating-point-suffix: one of**** f F**

float a = 42f; // ERROR

whereas this works:

float a = 42.0f; // OK

and as not many people know this works:

float a = 42.f; // OK

This is because:

decimal-floating-point-literal:

fractional-constant exponent-part_opt floating-point-suffix_opt

fractional-constant exponent-part_opt floating-point-suffix_opt

digit-sequence exponent-part floating-point-suffix_opt

fractional-constant:

digit-sequence_opt . digit-sequence

digit-sequence_opt . digit-sequence

digit-sequence .

I wonder why we need the redundant `.0` or `.`? What would we think of a proposal that allows an integer to be followed by `f`?

As in:

decimal-floating-point-literal:

fractional-constant exponent-part_opt floating-point-suffix_opt

digit-sequence exponent-part floating-point-suffix_opt

Where a `decimal-floating-point-literal` of the form `digit-sequence float-floating-point-suffix`, DF, where D is the `digit-sequence` and F is the `float-floating-point-suffix`, is equivalent to D.0F

Reply all

Reply to author

Forward

0 new messages

Search

Clear search

Close search

Google apps

Main menu