Date: Thu, 26 Jan 2023 12:44:00 -0500
On 1/26/23 12:23 PM, Fraser Gordon via Std-Proposals wrote:
> Hi folks,
>
> I was reading the [lex.ccon] section of the current draft and noticed
> an oddity in the hexadecimal-escape-sequence
> <https://eel.is/c++draft/lex.ccon#nt:hexadecimal-escape-sequence>
> production:
>
> /hexadecimal-escape-sequence:/
>
> \x /hexadecimal-digit-sequence/
> /hexadecimal-escape-sequence hexadecimal-digit/
> \x{ /simple-hexadecimal-digit-sequence/ }
>
> The combination of the 2nd and 3rd rules seems to say that \x{20}20
> should be parsed as a hex escape sequence (presumably representing
> u+2020). Octal doesn't have this issue as
> /octal-escape-sequence/ doesn't have a recursive definition.
>
> I tried this on Godbolt. GCC and Clang interpret '\x{20}20' as a
> multicharacter literal and "\x{20}{20}" as the string " 20". MSVC and
> icc appear not to support \x{}.
>
> I'd guess this isn't intentional as it would defeat the purpose of
> having \x{} sequences? At least two implementations seem to agree.
Good catch!
I think we want:/
/
/hexadecimal-escape-sequence:/
//\x /hexadecimal-digit-sequence_simple-hexadecimal-digit-sequence_ //
hexadecimal-escape-sequence hexadecimal-digit/
//\x{ /simple-hexadecimal-digit-sequence/ }
Would you be so kind as to file a CWG issue at
https://github.com/cplusplus/CWG?
Tom.
>
> Fraser
>
> Hi folks,
>
> I was reading the [lex.ccon] section of the current draft and noticed
> an oddity in the hexadecimal-escape-sequence
> <https://eel.is/c++draft/lex.ccon#nt:hexadecimal-escape-sequence>
> production:
>
> /hexadecimal-escape-sequence:/
>
> \x /hexadecimal-digit-sequence/
> /hexadecimal-escape-sequence hexadecimal-digit/
> \x{ /simple-hexadecimal-digit-sequence/ }
>
> The combination of the 2nd and 3rd rules seems to say that \x{20}20
> should be parsed as a hex escape sequence (presumably representing
> u+2020). Octal doesn't have this issue as
> /octal-escape-sequence/ doesn't have a recursive definition.
>
> I tried this on Godbolt. GCC and Clang interpret '\x{20}20' as a
> multicharacter literal and "\x{20}{20}" as the string " 20". MSVC and
> icc appear not to support \x{}.
>
> I'd guess this isn't intentional as it would defeat the purpose of
> having \x{} sequences? At least two implementations seem to agree.
Good catch!
I think we want:/
/
/hexadecimal-escape-sequence:/
//\x /hexadecimal-digit-sequence_simple-hexadecimal-digit-sequence_ //
hexadecimal-escape-sequence hexadecimal-digit/
//\x{ /simple-hexadecimal-digit-sequence/ }
Would you be so kind as to file a CWG issue at
https://github.com/cplusplus/CWG?
Tom.
>
> Fraser
>
Received on 2023-01-26 17:44:01