www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Implicit .dup inserting into AA keyed on char[], or not?

reply "Nick Sabalausky" <a a.a> writes:
In D2, if you do this:

void foo(char[] key)
{
    bool[char[]] aa;
    aa[key] = true;
}

Does that last line allocate a duplicate of key's data?
Mar 03 2011
next sibling parent Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
But it errors out?

Error: associative arrays can only be assigned values with immutable
keys, not char[]
Mar 03 2011
prev sibling parent reply Jonathan M Davis <jmdavisProg gmx.com> writes:
On Thursday 03 March 2011 17:54:46 Nick Sabalausky wrote:
 In D2, if you do this:
 
 void foo(char[] key)
 {
     bool[char[]] aa;
     aa[key] = true;
 }
 
 Does that last line allocate a duplicate of key's data?

More like it's illegal. The key type for associative arrays _must_ be immutable. Previously, that wasn't check for by the compiler, which meant that it was possible to change the values of keys (not good), which could quickly result in an AA in an invalid state. Not too long ago, however, it was fixed so that that's not legal. - Jonathan M Davis
Mar 03 2011
parent "Nick Sabalausky" <a a.a> writes:
"Jonathan M Davis" <jmdavisProg gmx.com> wrote in message 
news:mailman.2156.1299206161.4748.digitalmars-d-learn puremagic.com...
 On Thursday 03 March 2011 17:54:46 Nick Sabalausky wrote:
 In D2, if you do this:

 void foo(char[] key)
 {
     bool[char[]] aa;
     aa[key] = true;
 }

 Does that last line allocate a duplicate of key's data?

More like it's illegal. The key type for associative arrays _must_ be immutable. Previously, that wasn't check for by the compiler, which meant that it was possible to change the values of keys (not good), which could quickly result in an AA in an invalid state. Not too long ago, however, it was fixed so that that's not legal.

Ahh, I'm still on 2.050 so that's probably why it worked for me. (There's no particular reason I haven't updated to 2.051 or 2.052, I just got busy with non-D stuff for awhile and haven't gotten around to it.)
Mar 03 2011