Thread overview
aa bug?
Jul 28, 2009
Saaa
Jul 28, 2009
Ary Borenszweig
Jul 28, 2009
Saaa
Jul 28, 2009
Saaa
Jul 29, 2009
bearophile
Jul 29, 2009
Saaa
July 28, 2009
struct S
{
  int i;
}
S[char[]] aa;
void main() {
  aa["test"].i = 10;
}

Error: ArrayBoundsError
D1.046

looks like a bug to me or can't structs be aa's?


July 28, 2009
Saaa escribió:
> struct S
> {
>   int i;
> }
> S[char[]] aa;
> void main() {
>   aa["test"].i = 10;
> }
> 
> Error: ArrayBoundsError
> D1.046
> 
> looks like a bug to me or can't structs be aa's? 

But you never inserted anything in aa["test"].

You must do:

S s;
aa["test"] = s;
aa["test"].i = 10;

or:

S s;
s.i = 10;
aa["test"] = s;
July 28, 2009
> But you never inserted anything in aa["test"].
>
> You must do:
>
> S s;
> aa["test"] = s;
> aa["test"].i = 10;
>
> or:
>
> S s;
> s.i = 10;
> aa["test"] = s;

erm, ok
Thanks
So no creation on use :)
Personally I find the declation step clutter in the first case.
Maybe promote the bug  to a request?


July 28, 2009
On Tue, Jul 28, 2009 at 6:09 PM, Saaa<empty@needmail.com> wrote:
>
>> But you never inserted anything in aa["test"].
>>
>> You must do:
>>
>> S s;
>> aa["test"] = s;
>> aa["test"].i = 10;
>>
>> or:
>>
>> S s;
>> s.i = 10;
>> aa["test"] = s;
>
> erm, ok
> Thanks
> So no creation on use :)
> Personally I find the declation step clutter in the first case.
> Maybe promote the bug  to a request?

It won't happen.  The behavior you want *used* to be the AA behavior but was changed after several years and much complaining.  It's not going back.
July 28, 2009
It won't happen.  The behavior you want *used* to be the AA behavior but was changed after several years and much complaining.  It's not going back.

Ah history :D


July 29, 2009
Saaa:

> struct S
> {
>   int i;
> }
> S[char[]] aa;
> void main() {
>   aa["test"].i = 10;
> }
> 
> Error: ArrayBoundsError
> D1.046

Try:

struct S { int i; }
S[char[]] aa;

void main() {
    aa["test"] = S(10);
}

In theory a Sufficiently Smart Compiler is able to optimize that code well.

Bye,
bearophile
July 29, 2009
struct literals .. need to remember all D's features :)
D1.046 seems SS
aa["test"]=S();
works fine as well

> Try:
>
> struct S { int i; }
> S[char[]] aa;
>
> void main() {
>    aa["test"] = S(10);
> }
>
> In theory a Sufficiently Smart Compiler is able to optimize that code well.
>
> Bye,
> bearophile