On Fri, 08 Apr 2011 09:40:32 -0400, Denis Koroskin <[email protected]>
wrote:
On Fri, 08 Apr 2011 17:13:19 +0400, Steven Schveighoffer
<[email protected]> wrote:
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
What about storing objects as keys? There is nothing wrong to modify
those objects as long as their order stays the same.
I agree with you. See my second point. But even if that isn't what the
committee decides, the current behavior guarantees absolutely nothing.
-Steve