On 12/7/2014 2:46 AM, Sebastiaan Koppe wrote:
On Friday, 5 December 2014 at 23:58:41 UTC, Walter Bright wrote:
On 12/5/2014 8:48 AM, "Marc Schütz" <schue...@gmx.net>" wrote:
    scope ref int foo();
    scope ref int bar1(ref int a) {
        return a;
    }
    scope ref int bar2(scope ref int a) {
        return a;
    }
    ref int bar3(ref int a) {
        return a;
    }
    ref int bar4(scope ref int a) {
        return a;
    }
    void baz(scope ref int a);

Which of the following calls would work?

    foo().bar1().baz();

yes

    foo().bar2().baz();

no - cannot return scope ref parameter

    foo().bar3().baz();

yes

    foo().bar4().baz();

no, cannot return scope ref parameter

I understand that scope will not allow the contents of the variable to escape
the lifetime of a declaration. But can you explain why bar1() works, but bar2()
doesn't?

A 'scope ref' parameter may not be returned as a 'ref' or a 'scope ref'.

Isn't the body of bar2() in the line `foo().bar2();` part of the
declaration?

Besides, what does it mean to return a `scope ref int`? Does it mean that the
content of the variable that is returned is not allowed to escape the scope of
the calling site? Huh?

It means the reference itself (the pointer) does not escape.

Reply via email to