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.

Reply via email to