On 12/4/2014 4:03 AM, Martin Nowak wrote:
On Thursday, 4 December 2014 at 09:25:11 UTC, Walter Bright wrote:
http://wiki.dlang.org/DIP69

Great stuff.

Will this be possible, it's a fairly important use-case.

scope ref T setVal(scope ref T t)
{
     t.val = 12;
     return t;
}

Yes, it would be written:

  scope ref T setVal(ref T t)
  {
     t.val = 12;
     return t;
  }


Another question, how would a reference counted pointer take advantage of scope,
i.e. avoid the increment/decrement when being passed to a function?
One solution would be to add a function that returns a scoped reference to the
underlying value.
     struct RefCounted(T)
     {
         scope ref T borrow() { return *p; }
     }
Will it be possible to deduce, that the lifetime of that scoped value is tied to
the smart pointer?

  struct RefCounted(T)
  {
    T t;
    scope ref T borrow() { return t; }
    alias this t;
  }

This enables RefCounted!T to be implicitly converted to a T, but with a scoped result. This is a critical feature, one I spent a lot of time thinking about, and hope it's right :-)

Reply via email to