On Saturday, 19 November 2022 at 14:52:23 UTC, ag0aep6g wrote:
That's essentially just a function that returns its pointer parameter. So the program boils down to this:

----
@safe:
int* fp(return scope int* p) { return p; }
void main()
{
    int* p;
    {
        auto lf = new int;
        p = fp(lf);
    }
    assert(p != null); // address escaped
}
----

Which is fine, as far as I can tell. `lf` is not `scope`. And when you pass it through `fp`, the result is still not `scope`. So escaping it is allowed.

You do get an error when you make `lf` `scope` (explicitly or implicitly). So everything seems to be in order.

OK, so how do I make `lf` implicitly scope?

Reply via email to