In C++11 what should happen first: raw string expansion or macros?
[Update: Adrian McCarthy comments below saying MSVC++ 2017 fixes this]
GCC and clang are right, VC++ is wrong.
2.2 Phases of translation [lex.phases]:
[...]
The source file is decomposed into preprocessing tokens (2.5) and sequences of white-space characters (including comments).
Preprocessing directives are executed, [...]
And 2.5 Preprocessing tokens [lex.pptoken] lists string-literals
amongst the tokens.
Consequently, parsing is required to tokenise the string literal first, "consuming" the #else
and dostuff
function definition.