On Monday, 18 December 2023 at 14:38:14 UTC, Ki Rill wrote:
> > your code just return result value,
but it should not return but save result to "this"
see example at https://dlang.org/spec/operatoroverloading.html#index_op_assignment
I get an error, but don't understand why.
auto opOpAssign(string op)(Value rhs)
{
this = this + rhs;
return this;
}
// Error: `this` is not an lvalue and cannot be modified
Assigning an object is like copying a pointer. You may think you can try overloading the assignment, but it is forbidden:
However for class types, identity assignment is not allowed. All class types have reference semantics, so identity assignment by default rebinds the left-hand-side to the argument at the right, and this is not overridable.
But you aren't trying to do this.
Instead you are trying to reassign the this
reference, which is a local (and also forbidden). Think about it a second, your this + rhs
is going to allocate a new object. Then if the assignment to the local this
parameter succeeded, what happens outside the member function? The true reference that is calling this will not be updated!
The only way to do this I can see is to reimplement for op=, or maybe perform the operation and swap the guts out.
-Steve