[Issue 6253] Refuse definition too of impossible associative arrays

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Jan 7 06:38:54 PST 2012


http://d.puremagic.com/issues/show_bug.cgi?id=6253


Stewart Gordon <smjg at iname.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |smjg at iname.com


--- Comment #2 from Stewart Gordon <smjg at iname.com> 2012-01-07 06:38:51 PST ---
> (In reply to comment #0)
> 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[]

If all the elements of an array literal bind to immutable types, then 
so ought to whole array literal.

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

Agreed.

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

Which should actually declare aa to be a bool[immutable(int)[]], 
given that that's the only thing it will allow you to put in.

BTW the current behaviour (DMD 2.056) is actually rather weird:
----------
pragma(msg, (bool[int[]]).stringof);
pragma(msg, (bool[const(int)[]]).stringof);
pragma(msg, (bool[immutable(int)[]]).stringof);
pragma(msg, (bool[const(int[])]).stringof);
pragma(msg, (bool[immutable(int[])]).stringof);
----------
C:\Users\Stewart\Documents\Programming\D\d2\tests>dmd -c aa_array_param_type.d
bool[const(int)[]]
bool[const(int)[]]
bool[immutable(int)[]]
bool[const(int)[]]
bool[immutable(int[])]
----------

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list