The more I keep thinking about metaprogramming the more I feel like it's more of a detriment than a boon.
For one it's another layer in the Chinese whispers game that programming has turned into.
For another debugging the eventual code is going to be tricky. When debugging you want the machine code to be correlated to something human readable. For non-trivial metagenerated code, this is hard to do in a way that is easy to use.
For another sometimes you will want to debug the meta program itself, I have yet to see a language that lets you step through the compile time execution like that.
The only meta programming that actually lets you do this is separate source-generation tools. But you don't need language facilities for that.