Doing non-trivial preprocessing is a mistake. It's probably a good idea to pretend that the only preprocessing directive is #include. With constexpr, even #define is obsolescent.