Christopher Wright wrote:
Don wrote:
Some observations based on the use cases to date:
(1)
a += b is ALWAYS a = a + b (and likewise for all other operations).
opXXXAssign therefore seems to be a (limited) performance optimisation. The compiler should be allowed to synthesize += from +. This would almost halve the minimum number of repetitive functions required.

Not quite true:
class A
{
    int value;
    A opAdd(A other) { return new A(value + other.value); }
    A opAddAssign(A other) { value += other.value; }
}

class B
{
    A a;
    this (A value) { a = value; }
}

void main ()
{
    auto a = new A;
    auto b1 = new B(a);
    auto b2 = new B(a);
    auto a2 = new A;
    b1.a += a2; // okay, b1.a is b2.a
    b1.a = b1.a + a2; // now b1.a !is b2.a
}

Both expression should yield the same _value_, not necessarily the same _reference_, so “b1.a == b2.a” should return true.

Reply via email to