why foo2 is not inferred as scope which is shorter scope then foo1?
import std.stdio;
@safe:
class Obj {@safe: override string toString() { return "obj"; } }
struct Foo1
{@safe:
this(Obj obj) { this._obj = obj; }
~this() { _obj = null; } // do something with obj
// _obj must not be out live with Foo1, so need return attribute
@property Obj obj() return { return _obj; }
private Obj _obj;
}
struct Foo2
{@safe:
this(Obj obj) { this._obj = obj; }
~this() { _obj = null; } // do something with obj
void call() { writeln(_obj.toString()); }
// _obj must not be out live with Foo1, so need return attribute
@property Obj obj() return { return _obj; }
private Obj _obj;
}
void call1() { auto obj = new Obj(); auto foo1 = Foo1(obj); call2(foo1); }
// foo2 borrows foo1.obj and do something with it
void call2(ref Foo1 foo1) { auto foo2 = Foo2(foo1.obj); call3(foo2); }
void call3(ref Foo2 foo2) { foo2.call(); }
void main() { call1(); }
Getting below error message
onlineapp.d(29): Error: reference to local variable foo1
assigned to non-scope parameter obj
calling onlineapp.Foo2.this
Remove "return" from property obj fix the error message