On 2010-03-20 12:41:48 -0400, Andrei Alexandrescu <[email protected]> said:

On 03/20/2010 06:53 AM, Michel Fortin wrote:
On 2010-03-20 02:53:50 -0400, Andrei Alexandrescu
<[email protected]> said:

Perhaps it means you can't return ref returns from other functions if
you pass them references to local state.

You realize you're doing that all over the place in std.range when a
range wraps another one?

struct WrapperRange(R) {
R wrappedRange;
ref ElementType!R front() {
return wrappedRange.front();
}
}

How do you plan to implement that in your proposed ref regime? Member
functions receive 'this' as a ref argument, so they can't return a ref
don't they?

Hmmm, I think returning a ref to a member should be allowed as long as the compiler realizes that ref has the same scope as the struct it originated from.

Ok, so the compiler assumes that the scope of the ref returned by function is the same as its ref arguments and prevent you from returning a ref to it if one of the ref argument is a local variable?

That could work. It'd only become a hindrance in the more complex cases where you have multiple ref arguments in a function and no way to tell which one the returned ref comes from. But there's an easy solution for that: add a marker. For instance: a 'ref' argument is acceptable for a return value, and 'scope ref' argument cannot be used as a return value. ('scope' here exists only as a restriction for 'ref', it is not applicable to anything else.)


--
Michel Fortin
[email protected]
http://michelf.com/

Reply via email to