On Wednesday, 21 March 2012 at 20:41:17 UTC, Alvaro wrote:
I partially disagree. I think items should be added if we try
to *write* to them, but not when we *read* them (lvalue vs
rvalue). The problem is that it's hard to distinguish those
cases in C++ without an intermediate class that makes its use
uglier. So:
int[int] a;
a[3] = 1; // OK, add key 3
b = a[5]; // error, add nothing
And, compound assignment and increment/decrement are forms of
*writing*. So, they should trigger an element creation with the
.init value.
a[5]++; // create a[5] = int.init; and then increment
I have used similar before, it is nicer than
if(5 !in a)
a[5] = 1;
else
a[5]++;
but after taking a look at reduce.
double[int] a;
What is the result of your code on 'a' now? double.init is NAN.