On Friday, 4 January 2013 at 06:30:55 UTC, Sönke Ludwig wrote:
In other words, references returned by a function call that
took any references to locals would be
tainted as possibly local (in the function local data flow) and
thus are not allowed to escape the
scope. References derived from non-local refs could still be
returned and returning references to
fields from a struct method also works.
---
@safe ref int test(ref int v) {
return v; // fine
}
v should be scope here. If not, other function have no guarantee
that the reference will not escape.
@safe ref int test2() {
int local;
return test(local); // error: (possibly) returning ref to local
}
@safe ref int test3() {
int local;
int* ptr = &test(local); // fine, ptr is tainted 'local'
return *ptr; // error: (possibly) returning ref to local
}
@safe ref int test4(ref int val) {
return test(val); // fine, can only be a ref to the external
'val' or to a global
}
---
Given the modification mentioned above, this look like the way to
go.