https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120978
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Halalaluyafail3 from comment #4) > They are only considered operators during macro expansion. The standard > provides the following example: > > > #define hash_hash # ## # > > #define mkstr(a) # a > > #define in_between(a) mkstr(a) > > #define join(c, d) in_between(c hash_hash d) > > char p[] = join(x, y); // equivalent to > > // char p[] = "x ## y"; > Which demonstrates that a ## token can be used (in this case stringized) > without causing it to be treated as an operator. Though if 3 of the major compilers all agree and only one disagrees maybe this should be brought up to the committee as a defect requesting a clearification.