OK, I understand what you mean by "scope" and how that can be used to prevent leaking a local ref out.

Don't forget to consider this kind of scenario, which has no ref arguments to consider

struct X
{
   int _i;
   ref int f()
   {
      return _i;
   }
}

ref int F()
{

   X x;
   return x.f();
}

int main()
{
    // example uses that currently compile
    F = 1000;
    writeln(F());
}

Is this valid? Does local x remain defined up until the function call terminates completely, ie until after the reference is no longer valid?

I can also mark everything as @safe and it will compile, and also scope x

@safe ref int F()
{

   scope X x;
   return x.f();

   // this compiles too

   return x._i;

}

--rt

Reply via email to