Of course other constructs can be used instead, but with this logic you could also use a different program just to calculate what is known before (main program's) runtime, and then somehow pipe the results into your program.
The whole point of metaprogramming is **flexibility**. Using closure iterators and dynamic dispatching idioms and still getting CTE would be awesome, and it 's certainly doable! The VM **is** _a runtime_ so there is no restriction; it can emulate the runtime phase and resolve dynamic behavior.
