how to correctly populate an array of dynamic closures?
kdevel
kdevel at vogtner.de
Thu Mar 29 20:26:59 UTC 2018
On Thursday, 29 March 2018 at 20:05:35 UTC, ag0aep6g wrote:
> On Thursday, 29 March 2018 at 19:02:51 UTC, kdevel wrote:
>> On Thursday, 29 March 2018 at 15:16:07 UTC, Ivan Kazmenko
>> wrote:
> [...]
>>> int delegate () [] guns;
>>> foreach (i; 0..2) guns ~= () => i;
>>> foreach (i; 0..2) writeln (guns[i] ()); // 1 and 1, why?
>>
>> Isn't this undefined behavior? The first loop variable named
>> "i" already went out of scope when the delegate is invoked.
>
> Not undefined behavior.
What is the lifetime of the first loop's variable i? What about
this example:
``` bug2.d
import std.stdio;
void main ()
{
int delegate () [] dg;
foreach (i; 0..2) {
int *j;
if (i == 0) {
auto k = i;
j = &k;
}
else {
auto l = i;
j = &l;
}
dg ~= () => *j;
}
foreach (p; dg)
p ().writeln;
}
```
More information about the Digitalmars-d-learn
mailing list