On Tue, 23 Apr 2013 14:01:14 -0400, Diggory <digg...@googlemail.com> wrote:


So no more returning ref? Because if you allow returning ref, you lose any notion of safety, unless you plan on changing the entire compilation model?

The rules from DIP25/35 show how you can return refs while still maintaining safety.

Those rules disallow the following valid code:

struct S
{
    int x;
ref S opOpAssign(string op : "+")(ref S other) { x += other.x; return this;}
}

ref S add5(ref S s)
{
    auto o = S(5);
    return s += o;
}

void main()
{
    auto s = S(5);
    S s2 = add5(s);
}

Because opOpAssign takes two refs to S, and in add5, we bind one parameter to a local, we cannot return the result, even though it's perfectly safe and valid.

The point is simply that there exist valid and safe cases which will be disallowed by these rules. While maybe it's OK in your mind to restrict the above code from validity, it's currently valid and compiling code. You will be breaking existing code for pretty much no reason.

-Steve

Reply via email to