I wouldn’t call meta- and compile-time programming limited in modern C++ (C++17 and above).
With the addition of “constexpr” and “consteval” compile time programming is the same as runtime for many cases. Templates are obtuse for meta programming but usually can get the job done.
The need for macros much less common in modern code.