Bug 4041 – Error with ref or auto ref return from opOpAssign

Status
RESOLVED
Resolution
WORKSFORME
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2010-04-01T18:26:00Z
Last change time
2012-02-01T02:10:52Z
Assigned to
nobody
Creator
aldacron
Depends on
3175

Comments

Comment #0 by aldacron — 2010-04-01T18:26:25Z
############################## struct Foo { int x; ref Foo opOpAssign(string op)(ref Foo f) if(op == "+=") { x += f.x; return this; } } void main() { Foo f1 = Foo(1); Foo f2 = Foo(2); f2 += f1; } ################################# Results in: refret.d(5): Error: variable refret.Foo.op only parameters or foreach declaratio ns can be ref Change the return type from 'ref Foo' to 'auto ref Foo' and the same error occurs. Remove the ref from the return and it compiles. Comment out the 'f2 += f1' and it compiles. This happens on both 2.041 and 2.042. I haven't tried earlier versions. BTW, 2.042 is missing from the version list here on Bugzilla.
Comment #1 by rsinfu — 2010-09-25T18:19:48Z
*** Issue 4934 has been marked as a duplicate of this issue. ***
Comment #2 by k.hara.pg — 2011-06-20T02:17:53Z
Trivial fix of sample code: ---- struct Foo { int x; ref Foo opOpAssign(string op)(ref Foo f) if(op == "+") // <- "+=" { x += f.x; return this; } } void main() { Foo f1 = Foo(1); Foo f2 = Foo(2); f2 += f1; } ---- And, on dmd 2.054 (d36b3b12fc4814e59f3a0d680b8700e787b1ceff) this code has passed to compile.
Comment #3 by yebblies — 2012-02-01T02:10:52Z
I can't reproduce this.