On Tue, Jan 3, 2012 at 1:25 PM, simendsjo <[email protected]> wrote: > seems T[char[]] is rewritten as T[const(char)[]], and does not accept char[] > as key even if mutable data should automatically convert to const (right..?) > > Shouldn't T[char[]] be disallowed, and have to be written as > T[immutable(char)[]] instead of a silent rewrite? > > > alias long[char[]] AA; > // key automatically changed to const(char)[] > static assert(is(AA == long[const(char)[]])); > AA aa; > aa["a"] = 10; > // error - have to use immutable keys > aa["b".dup] = 11;
By design, the problem is things like this: char[] key = "somekey"; long[char[]] aa; aa[key] = 5; key[2] = 'b'; If this were allowed, the associative array would reach an invalid state where the hash it stored for the key is no longer correct. It does seem like T[char[]] should be disallowed and the requirement for immutable keys should be literally enforced, and it's possible that was intended but immutable/const weren't as complete when this problem was last visited. I'll see if I can dig up an old discussion about this.
