On Wednesday, 20 March 2013 at 19:01:27 UTC, Jonathan M Davis wrote:
Why are you casting? The cast shouldn't be necessary, because you're doing the
initialization inside a static constructor.

Without it I get:
Error: mutable method cmap.S.__postblit is not callable using a const object
Error: cannot modify struct this Slot with immutable members


If you had problems, I'd expect it
to be that AAs don't work properly when const (I know that there are issues when they're immutable) or that you can't insert elements into a const or immutable AA (which you'll never be able to do). But what you're doing here should work just fine without the cast. Assuming that AAs worked with const or immutable correctly, then it would be normal to do something like

immutable int[string] aa;

static this()
{
 int[string] temp;
 temp["foo"] = 7;
 temp["blah"] = 12;
 aa = assumeUnique(temp);
}

For now it seems the cast is necessary - so as long as it is safe.

I am not using 'immutable S[string]aa', but it would be interesting to see how that could be initialized. So, how to initialize aa. Does assumeUnique work for associative arrays?
------------------
import std.exception;

struct S {
  this(this) { x = x.dup; }
  char[] x;
}

immutable S[string] aa;

static this() {
   // now what
}

Thakns
Dan

Reply via email to