##############################
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.