Don wrote:
Frits van Bommel wrote:
Don wrote:
A straightforward first step would be to state in the spec that "the
compiler is entitled to assume that X+=Y yields the same result as
X=X+Y"
That doesn't hold for reference types, does it?
I thought it does? Got any counter examples?
For any class type, with += modifying the object and + returning a new one:
B1 = A;
B1 += C; // A is modified, B1 stays same reference
assert(A is B1);
B2 = A;
B2 = B2 + C; // Doesn't touch A, B2 is reassigned a different ref
assert(A !is B2);
You can't just arbitrarily substitute between these two.
Certainly you can't substitute + with +=.
I suppose substituting += with + might be reasonable if no += is provided.