On 12/4/2014 1:10 PM, Walter Bright wrote:
On 12/4/2014 11:41 AM, H. S. Teoh via Digitalmars-d wrote:
3) What does scope mean for delegate parameters? To what does the scope
apply, the delegate itself, its body, or its return value, or ...?

    struct S {
        void opApply(scope void delegate(ref int) loopBody) {
            ...
            // what restrictions (might) apply here w.r.t.
            // how loopBody can be called?
        }
    }

Hmmm, looks like a problem I didn't think of. darnit!

Turns out, 'ref' has exactly the same issue. The resolution is the same:

  alias ref int delegate() dg_t; // ref applies to return type
  void foo(dg_t dg) {
    static int i;
    ref int bar() { return i; } // ref applies to return type
    dg = &bar;
    dg() = 3;
  }

versus:

  void foo(ref int deletate() dg) { // ref applies to declaration dg
    int bar() { return 3; }
    dg = &bar;
  }

Replace 'ref' with 'scope'.

Reply via email to