Why does M(0) and N(0) have different results?
#define CAT_I(a, b) a ## b #define CAT(a, b) CAT_I(a, b) #define M_0 CAT(x, y) #define M_1 whatever_else #de
There seems to be something that you might have failed to spot but your macro has N(a) CAT(N_,a)(), whereas M(a) is defined as CAT(M_, a) Notice the extra parameter brackets used....
N(a) CAT(N_,a)()
CAT(M_, a)