On Tuesday, 13 May 2014 at 17:09:17 UTC, Steven Schveighoffer wrote:
On Tue, 13 May 2014 09:50:12 -0400, Dicebot <[email protected]> wrote:

On Tuesday, 13 May 2014 at 13:40:42 UTC, Jacob Carlborg wrote:
On 13/05/14 15:36, Dicebot wrote:

There are 2 `scope` uses to think about. One is storage class and in that context `scope` is more of owned / unique pointer. Other is parameter qualifier and that one is closer to ref / borrowed pointer.

Main problem about making `ref` borrowed pointer is that you will need to prohibit storing it in function transitively. This will need to
become invalid code:

struct A
{
   int* ptr;
}

int* gptr;

void foo(ref A a)
{
gptr = a.ptr; // error, can't leak borrowed a.ptr into global context
}

This feels like too much of a breakage, this is why `scope` (or `scope
ref`) feels more appropriate.

I always though "scope" would behave like that.

Walter's initial post implies that he wanted to re-used `ref` for borrowed pointer (which would mean same semantics as `scope` parameter qualifier)

Yes, the difference here is that scope is a storage class, and only affects the "head", whereas borrowed would have to be transitive.

-Steve

`scope` has to be both storage class and qualifier to work

Reply via email to