Confusion/trying to understand CTFE keywords

Steven Schveighoffer schveiguy at yahoo.com
Tue Jun 5 13:27:35 UTC 2018


On 6/5/18 6:40 AM, Simen Kjærås wrote:
> On Tuesday, 5 June 2018 at 09:36:22 UTC, Gopan wrote:
>> void main()
>> {
>>     immutable n = __ctfe ? 1 : 2;
>>     int[n] a;
>>     assert(a.length == n); // fails, wat
>> }
> 
> That's gotta be a bug - that should give a 'variable n cannot be read at 
> compile time' error. The fact that n is immutable shouldn't be enough to 
> use it at compile time. Filed as 
> https://issues.dlang.org/show_bug.cgi?id=18945.

Indeed it is a bug. Interesting to see what the compiler sees as its AST:

import object;
void main()
{
         immutable immutable(int) n = __ctfe ? 1 : 2;
         int[1] a = 0;
         assert(1LU == cast(ulong)n);
         return 0;
}

This is what -vcg-ast spits out.

Note the int[1].

-Steve


More information about the Digitalmars-d-learn mailing list