I ran the following code through the Visual Studio 2013 preprocessor. The output surprises me.
Contents of hello.cpp:
#define A(j) #j A(A?) A(B?) A(
This appears to be a bug in the MSVC preprocessor. The good news is that depending on how picky you are with your output, you can work around the issue by putting a space after the R or L.
A(L ?p:q), // "L ?p:q"