https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67224
--- Comment #39 from Joseph S. Myers <jsm28 at gcc dot gnu.org> --- Spelling is a sequence of characters - and a spelling where those characters include \ and u is different from a spelling where a multibyte source character appears directly, and also different from a spelling with \ and U. (This is different from older versions of C++ that used to have a model where everything was converted to UCNs in an early translation phase.) This is no different from e.g. "\xaa" and "\xAA" being different spellings of a string literal with the same semantics, because different sequences of source multibyte characters make up the preprocessing tokens. Or 0 and 00 being different spellings of integer literals with the same type and value. Or <: and [ having the same semantics but different spelling.