April 05, 2008 [Issue 1974] New: overloaded assignment operators work on non-lvalues | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=1974 Summary: overloaded assignment operators work on non-lvalues Product: D Version: unspecified Platform: Other OS/Version: Other Status: NEW Keywords: accepts-invalid Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: default_357-line@yahoo.de Code: module test; import std.stdio; struct Foo { int y; void opAddAssign(int z) { y += z; } } struct Bar { Foo fou; Foo test() { return fou; } } void main() { Bar x; x.fou.y = 0; x.test() += 1337; writefln(x.fou.y); } The problem is that opAddAssign can be called even though the Foo it's being called on is not an lvalue at all. I see two solutions: either make this an error, or try to invoke opIndexAssign to write the value back after the expression has been evaluated. The first is probably easier. -- |
Copyright © 1999-2021 by the D Language Foundation