https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120978
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #2) > The C23 spec says: > any token other than a parenthesis, a bracket, or a brace > > But # is not a token in C; it is only a preprocessor token ... I was wrong there, it is a C token but I suspect it is considered either the `#` or `##` pp operator which case then would be invalid here. And that is why GCC, EDG and MSVC all reject this because those 2 pp operators are processed earlier than attribute processing. But I could be reading the spec wrong still.