#include // the ## preprocessing operator joins 2 preprocessing tokens and then that token is reevaluated // see 16.3.3 #define MACONE(x,y) x #define MACTWO(x,y) y #define PICK(picker, x, y) MAC ## picker (x,y) int main(int argc, char** argv) { // prints 5 std::cout << PICK(ONE, 5, 7) << std::endl; // prints 7 std::cout << PICK(TWO, 5, 7) << std::endl; return 0; }