www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - aa bug?

reply "Saaa" <empty needmail.com> writes:
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? 
Jul 28 2009
next sibling parent reply Ary Borenszweig <ary esperanto.org.ar> writes:
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;
Jul 28 2009
parent reply "Saaa" <empty needmail.com> writes:
 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?
Jul 28 2009
parent reply Jarrett Billingsley <jarrett.billingsley gmail.com> writes:
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"] =3D s;
 aa["test"].i =3D 10;

 or:

 S s;
 s.i =3D 10;
 aa["test"] =3D s;
erm, ok Thanks So no creation on use :) Personally I find the declation step clutter in the first case. Maybe promote the bug =A0to 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.
Jul 28 2009
parent "Saaa" <empty needmail.com> writes:
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 
Jul 28 2009
prev sibling parent reply bearophile <bearophileHUGS lycos.com> writes:
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
Jul 28 2009
parent "Saaa" <empty needmail.com> writes:
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 
Jul 28 2009