After further review, I now realize that the right way (for me) to do this is to add a .dup property. So instead of
S foo(const S s) { S other; other = s; } or S foo(const S s) { S other = S(s); return other; } which didn't look right to me, I can write S foo(const S s) { S other = s.dup; return other; } which is ultimately an equivalent operation. Thanks again, everyone for taking the time to explain what was going on. Paul It just looks better to me. Paul D. Anderson Wrote: > bearophile Wrote: > > > The idea now is to find a way to encapsulate that manual copying & dupping > > into some overloaded operator of S. But I have failed so far. Operator > > overloading in D2 is not an easy thing, it needs training. (That's why I > > have recently asked for the compiler to be strict to avoid wrong usages of > > the operator overloading.) > > > > Bye, > > bearophile > > > So I understand better now, thanks, what is wrong. I'm a little disappointed > that there is apparently no way to implement case 4 for any struct with a > reference. > > Paul