On 02/21/2014 08:46 AM, Gopan wrote:

> 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?

Yes. The compiler needs the value of n at compile time so it evaluates it at compile time.

I agree that it is confusing but I feel like it is the responsibility of the programmer to ensure consistent behavior.

Ali

Reply via email to