On 12/20/2013 02:29 PM, Ivan Smirnov wrote:> I was wondering if this behavior is actually documented anywhere? Let's
> say we want to increment i and store the new value at the index equal to
> the new (incremented) value.
>
>      int[int] a;
>      int i = 1;
>      a[++i] = i;
>      writeln(a);
>      a[i] = ++i;
>      writeln(a);
>
>>> [2:2]
>>> [2:2, 3:3]
>
> If any, I would expect it to work for either one of lines but not both?
>
> What is interesting, if you compile the same in C (I used clang), you
> get a "warning: unsequenced modification

That is a roundabout way of saying "the assignment operator does not define a sequence point". :p

> and access to 'i'" on both
> lines and the answer is (as I would initially except)
>
>>> [2:1]
>>> [2:1, 3:3]

Well, regardless of one's expectations, that is one outcome of unspecified behavior. :)

Although D is less vocal on these topics it is the same as C and C++: The evaluation order is unspecified. I've read before that Walter wants to eventually define such evaluation orders but it is not specified yet.

Ali

Reply via email to