Another strange thing: import std.stdio;
uint Test() { if (!__ctfe) { return 3; } return 2; } void main() { immutable n = Test(); int[n] arr; writeln("arrary length = ", arr.length, " ; n = ", n); } Output: arrary length = 2 ; n = 3When you think about it you understand that it's logically right behavior, but it's not acceptable in practice.