#define cat(...) cat_i(__VA_ARGS__,,,,,)
#define cat_i(a, b, c, d, e ...) \
a ## b ## c ## d ## e \
/**/
#define primitive_cat(a, b) a ## b
#define partial_cat(x, y) cat(partial_cat_, x, y)
#define partial_cat_00(a, b) partial_cat_f(, ## a, b ## ,)
#define partial_cat_01(a, b) partial_cat_f(, ## a, b ,)
#define partial_cat_10(a, b) partial_cat_f(, a, b ## ,)
#define partial_cat_11(a, b) partial_cat_f(, a, b ,)
#define partial_cat_f(a, b, c, d) b ## c
#define X Paul
#define Y Mensonides
partial_cat(0, 0)(X, Y) // XY
partial_cat(0, 1)(X, Y) // XMensonides
partial_cat(1, 0)(X, Y) // PaulY
partial_cat(1, 1)(X, Y) // PaulMensonides