AA char[] as key
Andrew Wiley
wiley.andrew.j at gmail.com
Tue Jan 3 11:41:10 PST 2012
On Tue, Jan 3, 2012 at 1:25 PM, simendsjo <simendsjo at gmail.com> 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.
More information about the Digitalmars-d-learn
mailing list