Running this code I would expect to get "ref" three times, but ...

-------
import std.stdio;
struct A {
        int[128] data;
        ref A opAdd(const ref A a) {
                A cp = this;
                cp.data[] += a.data[];
                return cp;
        }
}

void fun(A a) { writeln("copy"); }
void fun(const ref A a) { writeln("ref"); }

void main() {
        A a, b;
        fun(a + b); //prints "copy"
        fun(A());   //prints "copy"
        fun(a);     //prints "copy"
}
-------

After some tests I concluded that is not possible to pass the result of a+b as a reference (which is what interests me most) and this creates an evident performance problem.
Is there any solution that I missed ?

Reply via email to