digitalmars.D.bugs - [Issue 1974] New: overloaded assignment operators work on non-lvalues
- d-bugmail puremagic.com (29/29) Apr 05 2008 http://d.puremagic.com/issues/show_bug.cgi?id=1974
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. --
Apr 05 2008