On Friday, 28 March 2014 at 16:54:49 UTC, Benjamin Thaut wrote:
I had a bug which came down to the following line today:
m_takeIndex = m_takeIndex++;
Actually this line does nothing. m_takeIndex remains at exactly
the same value as before (tested with dmd 2.065).
Can someone please explain why? And would be suitable to warn
about this, if it is correct behaviour?
Kind Regards
Benjamin Thaut
This should be invalid.
m_takeIndex++;
actually increments the variable.
m_takeIndex = m_takeIndex++; should do exactly the same.
It is a bug. It might be correct in monarch's world but it is not
logical. I think monarch is just trying to justify the way D does
it, regardless if D is D is wrong or not.
I imagine what is going on is that D is creating a temp variable,
assigning it to the local variable, then incrementing the temp
variable(since++ increments "after" the assignment).
That, or D really is treating that as a nop, which is wrong too.
Test case shows it is probably the first:
int j = 0, i = 0;
i = j++;
// i = 0, j = 1
hence D is wrong, Monarch is wrong, etc...
m_takeIndex = m_takeIndex++;
should, given the example above, evaluate to
m_takeIndex = m_takeIndex; (a nop)
m_takeIndex++; (variable incremented)
hence, D is not consistent with itself, which at the very least
is a bug.