https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109936
--- Comment #10 from Andreas Schwab <sch...@linux-m68k.org> --- > The standard says "Each preprocessing token that is converted to a token > (5.6) shall have the lexical form of a keyword, an identifier, a literal, or > an operator or punctuator." The argument of the macros is not converted to a token, but discarded in phase 4. > ≠ cannot be used in an identifier, and it's none of the other forms either. It is a valid preprocessing token ("non-whitespace character that cannot be one of the above").