immutable int n = Test(); int[n] x;---- compiles, but __ctfe is false. How?

Gopan gggopan at gmail.com
Fri Feb 21 08:46:24 PST 2014


On Friday, 21 February 2014 at 14:04:45 UTC, FreeSlave wrote:
> 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 = 3
>
> When you think about it you understand that it's logically 
> right behavior, but it's not acceptable in practice.

It looks like 'immutable n = Test();' is executed during both 
compile time and runtime.  Is that what is happening?


More information about the Digitalmars-d-learn mailing list