On Fri, 08 Apr 2011 06:44:42 -0400, Simen kjaeraas <[email protected]> wrote:

On Fri, 08 Apr 2011 12:46:08 +0200, Morlan <[email protected]> wrote:

It is OK if I write

  int[char[]] asr;
  asr["hello"] = 10;

but the following does not compile:

  char[] car = "hello";

What is the explanation for this behaviour?

The first should not be allowed. It is a mistake to use non-immutable
keys for an associative array.

int[char[]] asr;
pragma(msg, typeof(asr).stringof);

outputs:

AssociativeArray!(const(char)[],int)

So the compiler adds const to the keys, which is why it works.

Do I think this is the correct behavior? Absolutely not. First, it prevents nothing as far as modifying keys (const accepts mutable keys as well as const and mutable ones). Second, I believe you should be able to use whatever key constancy you want. We should just say if you do the wrong thing, it's undefined. Maybe @safe code can only use immutable keys. Third, if it must be illegal to have an AA with mutable keys, it should be an error, not silently change to const.

-Steve

Reply via email to