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.

Reply via email to