[Issue 2043] Closure outer variables in nested blocks are not allocated/instantiated correctly: should have multiple instances but only have one.

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue May 24 05:34:01 UTC 2022


https://issues.dlang.org/show_bug.cgi?id=2043

Walter Bright <bugzilla at digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |WORKSFORME

--- Comment #40 from Walter Bright <bugzilla at digitalmars.com> ---
Note that dgList exceeds the lifetime of b, and should fail to compile for that
reason.

Let's try it (adding import and @safe and updating the code to D2):
----
import std.stdio;

@safe:

void delegate()[] dgList;

void test() {

        foreach(int i; [1, 2, 3]) {
                int b = 2;
                dgList ~= { writeln(b); };
                writeln(&b); // b will be the *same* on each iteration
        }
}
----

> dmd test.c -preview=dip1000
test.d(13): Error: reference to local variable `b` assigned to non-scope
parameter `_param_0`

This is correct behavior. There is no way D should allow references to
variables that went out of scope.

--


More information about the Digitalmars-d-bugs mailing list