[cfe-dev] hexfloats in c++0x
dgregor at apple.com
Thu Feb 10 10:04:20 PST 2011
On Jan 29, 2011, at 10:01 PM, Johannes Schaub (litb) wrote:
> Douglas Gregor wrote:
>> On Jan 27, 2011, at 10:50 AM, Howard Hinnant wrote:
>>> Can we turn on support for hexfloats in -std=c++0x? It is already turned
>>> on in c++03 mode.
>>> get_double.pass.cpp:108:14: error: invalid suffix 'p' on integer constant
>>> assert(v == 0x125p-1);
>> They're disabled in C++0x mode because they conflict with user-defined
>> literals. We might be able to jump through some hoops to see if there's a
>> literal operator named "p" or "P" in scope, but... yuck.
>> Suggestions welcome!
> I think that behavior is undefined for any program that uses a literal
> suffix without a leading underscore, because those names are reserved for
> use by a further Standard.
The *library* reserves those names, not the language. The language is perfectly happy to allow operator ""p, and that's where the conflict with C99 comes up.
> Therefor, I think clang's lexer could just prefer lexing "0x123p4" as a
> floating point literal and can issue a warning about declarations of names
> such as 'operator "" p' ("warning: literal operator will never be used
> implicitly" or some such).
Yes, of course we can do that. It's a hack that assumes that the user is going to use the standard library somewhere, and therefore falls under the rule that prohibits user-defined literal operators without a leading "_".
More information about the cfe-dev