On 12/14/2016 04:02 AM, Ali wrote: > On Tuesday, 13 December 2016 at 23:29:31 UTC, Ali Çehreli wrote: >> On 12/13/2016 01:36 PM, Ali wrote: >> >>> Now about that second part of my problem .... >> >> I'm not entirely sure whether this should work but I think the problem >> is with mutating the 'frequencies' member of an immutable element of >> 'rooms'. The error message means that those non-const expressions >> cannot be shared by a member of an immutable AA. > > I'm not sure I fully follow here. Because the variable in the parse > function is not immutable and the frequencies member is not "created" > yet, so to say. So after I create the frequencies object, I assign it to > the member of a Room object. The following illustrates this more clearly > I think: > > struct A { int x; } > struct B { int[char] x; } > auto f1() { > int x; > x = 3; > return A(x); > } > > auto f2() { > int[char] x; > x['A'] = 2; > return B(x); > } > > static immutable a = f1(); > static immutable b = f2(); > > pragma(msg, a); > pragma(msg, b); > > This fails to compile with "Error: non-constant expression ['A':2]". > But, the pragma(msg) prints out the correct information for both a and b.
Yeah, I think the compiler is confused because the function is called in a non-const context during the initialization of an immutable object.
I would open an issue: https://issues.dlang.org/enter_bug.cgi?product=D Ali