This reverts part of d594954bf2 as the MSVC preprocessor does not
enjoy nested `#if` statements inside macro parameters leading to
a build error.
Neither GCC nor MSVC is correct or wrong here as the C99 standard
has this to say on the subject:
"If there are sequences of preprocessing tokens within the list of
arguments that would otherwise act as preprocessing directives, the
behaviour is undefined"
source: C99 - 6.10.3.11 (Macro replacement)
Worth noting C++17 has identical language inside the cpp.replace
section of the standard.
Given this is undefined behaviour for both C99 and C++17, best not to
rely on it.