Is @safe still a work-in-progress?

Walter Bright newshound2 at digitalmars.com
Wed Aug 22 09:05:13 UTC 2018


On 8/21/2018 8:58 PM, Nicholas Wilson wrote:
> On Tuesday, 21 August 2018 at 14:31:02 UTC, Atila Neves wrote:
>> The problem is that the code we write doesn't deal directly with pointers - 
>> see the recent confusion in this forum over where `scope` on the left applies 
>> to the `this` pointer or the one returned by the member function.
>>
>> Kagamin just told me I needed to use `return` instead of `scope` to get things 
>> to work and I'm still not sure why.
> 
> The way I think about it is if you have a function that takes a pointer, any 
> pointer, and either returns it or a pointer derived from it (dereferencing or 
> indexing) that argument must be marked `return`. In your case it was a pointer 
> derived from `this` so `return` must be applied to `this`.


Another way to think about it is this:

    S s;
    return &s;

We all know that is an error. The idea is to have a way to express that for:

     S s;
     return s.foo();

and:

     S s;
     return foo(&s);

so that the compiler knows that the return value of foo() is attached to the 
lifetime of s. Pretty much everything flows from that.


More information about the Digitalmars-d mailing list