Ответ 1
0xe+1
рассматривается как один токен предварительной обработки номера предварительной обработки. Это правило токенизации не совсем совпадает с определением числовых литералов в обычной грамматике; номера предварительной обработки определяются как
pp-number:
digit
. digit
pp-number digit
pp-number identifier-nondigit
pp-number ' digit
pp-number ' nondigit
pp-number e sign
pp-number E sign
pp-number p sign
pp-number P sign
pp-number .
Если правила токенизации были основаны на определениях числового литерала вместо более простого определения числа "предварительной обработки", ваше выражение будет обозначаться как 0xe + 1
, но поскольку правила не совпадают, вы получаете один 0xe+1
, который не является допустимым литералом.