On Sunday, 30 December 2012 at 08:38:27 UTC, Jonathan M Davis
wrote:
After some recent discussions relating to auto ref and const
ref, I have come
to the conlusion that as it stands, ref is not @safe. It's
@system. And I
think that we need to take a serious look at it to see what we
can do to make
it @safe. The problem is combining code that takes ref
parameters with code
that returns by ref. Take this code for example:
ref int foo(ref int i)
{
return i;
}
ref int bar()
{
int i = 7;
return foo(i);
}
ref int baz(int i)
{
return foo(i);
}
void main()
{
auto a = bar();
auto b = baz(5);
}
Both bar and baz return a ref to a local variable which no
longer exists. They
refer to garbage. It's exactly the same problem as in
IMHO, try to return ref to local variable should be error, and
such a code shouldn't be compilable