When replacing the __VA_ARGS__ parameter in a variadic macro, the variable arguments, when replaced in the replacement list, are considered as a single token, instead of multiple.
The C/C++ standard defines these steps when replacing variadic macros:
1. Determine the variable arguments.
2. Replace __VA_ARGS__ in the macro's replacement list with the tokens in the variable arguments.
3. Rescan the resulting token list, replacing macros (with the usual restriction of not recursively replacing macros).
However, when you try to recompile the programme below, errors occur. I've checked the same programme with GNU's compiler, and it compiles (and executes) as expected.