May 11, 2005
Are multidimensional AAs possible?

I have this:

byte[char[]][uint] m_on;

then when I say m_on["char"][13]=1;
dmd says that ot can't convert "char" to uint and 13 to char[]...
so I switch them and it compiles but it is supposed to work at all
and is this the way it should work?
(in my case I use variables of couse not "char" && 13)


May 11, 2005
bobef wrote:

> Are multidimensional AAs possible?
> 
> I have this:
> 
> byte[char[]][uint] m_on;
> 
> then when I say m_on["char"][13]=1;
> dmd says that ot can't convert "char" to uint and 13 to char[]...
> so I switch them and it compiles but it is supposed to work at all
> and is this the way it should work?
> (in my case I use variables of couse not "char" && 13)

Read declarations from right to left.  That is an associative uint array of associative string arrays of bytes.  So this would work instead:

    m_on[13]["char"]=1;

This change was done some years back because the old declaration method was both right-to-left and left-to-right, leading to C's unreadable complex declarations, and particularly how confusing it was when you would break down a complex type into a series of typedefs.

It's a thirty-year-old mistake (types should be on the right and read left-to-right) and we can't entirely fix it without breaking C declaration compatibility altogether.