Summary: Refuse definition too of impossible associative arrays
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: accepts-invalid
          Severity: normal
          Priority: P2
         Component: DMD

--- Comment #0 from 2011-07-05 10:39:31 PDT ---
This program:

void main() {
    bool[int[]] aa;
    aa[[1, 2]] = true; // line 3

With DMD 2.053 gives a compile time-error:
test.d(3): Error: associative arrays can only be assigned values with immutable
keys, not int[]

While this program works:

import std.stdio;
void main() {
    bool[int[]] aa;
    aa[[1, 2].idup] = true;
    foreach (k, v; aa)
        writeln(typeid(typeof(k)), " ", typeid(typeof(v)));

With DMD 2.053 it prints:
const(int)[] bool

So the writeln shows that that the keys of the associative array aa are mutable
dynamic arrays of immutable integers. While the first program shows that the
compiler refuses to add a mutable dynamic array as key.

I think this is bad, and not intuitive. I suggest to make DMD refuse this
definition too:
bool[int[]] aa;

And accept this, and similar:
bool[const(int)[]] aa;

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to