On Sunday, 30 December 2012 at 09:18:30 UTC, Jonathan M Davis wrote:
On Sunday, December 30, 2012 10:04:01 Daniel Kozak wrote:
IMHO, try to return ref to local variable should be error, and
such a code shouldn't be compilable

You can disallow that in the easy case of

ref int boo(int i)
{
    return i;
}

and in fact, that's already illegal. The problem is the wrapper function. You'd also have to disallow functions from returning ref parameters by ref.
Otherwise,

ref int foo(ref int i)
{
    return i;
}

ref int baz(int i)
{
    return foo(i);
}

continues to cause problems. And making it illegal to return ref parameters by ref would be a serious problem for wrapper ranges, because they do that sort of thing all the time with front. So, that's not really going to work.

- Jonathan M Davis

Wouldn't it be enough to disallow functions that both take and return by ref? There would still be some limitations, but at least:

//----
@property ref T front(T)(T[] a);
//----
Would still be @safe.

It seams the only code that is unsafe always boils down to taking an argument by ref and returning it by ref...

At best, we'd (try) to only make that illegal (when we can), or (seeing things the other (safer) way around), only allow returning by ref, if the compiler is able to prove it is not also an input by ref?

Reply via email to