C++ stringizing and token-pasting
Macro expansion is an important thing to know when trying to do metaprogramming in C++. Specifically, the stringizing (#) and token-pasting (##) operators. They are also explained in this Cppreference article.
If the argument(s) used in the stringizing and token-pasting operators is a macro, then two levels of macro expansion are needed.
#define STRINGIFY_DETAIL(x) #x
#define STRINGIFY(x) STRINGIFY_DETAIL(x)
#define PASTER(x,y) x ## y
#define EVALUATOR(x,y) PASTER(x,y)
Check out this StackOverflow answer to understand how it works.