digitalmars.D.learn - Implicit .dup inserting into AA keyed on char[], or not?
- Nick Sabalausky (7/7) Mar 03 2011 In D2, if you do this:
- Andrej Mitrovic (3/3) Mar 03 2011 But it errors out?
- Jonathan M Davis (7/16) Mar 03 2011 More like it's illegal. The key type for associative arrays _must_ be im...
- Nick Sabalausky (5/23) Mar 03 2011 Ahh, I'm still on 2.050 so that's probably why it worked for me. (There'...
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
But it errors out? Error: associative arrays can only be assigned values with immutable keys, not char[]
Mar 03 2011
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
"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: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.)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.
Mar 03 2011