[C++-0x] User-defined literals.
Ed Smith-Rowland
3dw4rd@verizon.net
Thu Sep 23 01:01:00 GMT 2010
On 09/21/2010 06:47 PM, Rodrigo Rivas wrote:
>> I'm holding out for rolling back the lexer in some way that won't break everything and emitting the (unrecognized by cpp ) suffix as a separate identifier token. I'm thinking the cp_lexer_* routines or maybe a new one in parser.c would be worth trying. Then the code I have now would just work (except I would still need enhanced lookup rules as discussed earlier). It would be nice to have all types on the same page too.
>>
> Hmmm, you indend to break the user-defined integer/float into two
> tokens: the number and the suffix. I don't know... it may cause quite
> some unexpected problems. Note that the draft defines a
> user-defined-literal as *one* token but you want to read it as *two*
> tokens.
> That would make ill-formed code parseable, for example:
> int x = 10 /* whatever */ _foo;
>
> On second thought, this already happens with strings and chars:
> "xxx" /**/ _bar;
> is parsed fine with your current patch, but I believe it should not.
>
> Rodrigo.
>
>
I'm coming around to your idea. I'm giving up on tokenizing tricks.
We got "lucky" with chars and strings because there was no pre-existing
significance to a suffix in those cases.
I haven't tried it but I think this would "pass":
"Hello, World!" _foo;
with space between the string and the suffix.
I know this passes but shouldn't:
operator ""E(long double);
with no space between the string and the 'E'.
Maybe once I get numbers working I'll turn to those issues.
Ed
More information about the Gcc
mailing list