What counts as a complex meta programming feature?
When would you use it?
Each time the source is compiled, the compiler will need to redo all the meta-programmed work. There aren't any real facilities to cache the results of the metaprogramming except by using a build system and not recompiling that source file. (Which of course doesn't work when doing single translation unit builds.)Is there a reason to do single translation unit builds - if your programming language supports modules (such as D)?
The only meta programming that actually lets you do this is separate source-generation tools. But you don't need language facilities for that.