digitalmars.D - Worlds of CTFEs & templates
- bearophile (22/22) Mar 13 2010 Currently this program doesn't compile:
Currently this program doesn't compile: template Foo(int x) { static if (x) enum int Foo = 1; else enum int Foo = 0; } int bar() { if (__ctfe) { for (int i; i < 1; i++) int r = Foo!(i); } return 0; } enum int r = bar(); void main() {} I think it doesn't compile because CTFE functions must be able to run both at compile-time and run-time, so it can't call a template that uses a "run-time" variable, even if it's used only by a CTFE function that knows the value at compile-time :-) I think that if(__ctfe){ doesn't improve the situation because that's another run-time variable. But being able to use templates from CTFE functions is very useful, otherwise the worlds of CTFE and templates are too much separated (but I think a template can call a CTFE function), and the compiler knows that the code inside the if(__ctfe){ will never run at run-time. So can the compiler be modified to allow templates inside the scope of if(__ctfe){...} ? Bye, bearophile
Mar 13 2010