module main; import std.stdio; void main(string[] args) { auto d = foo(); writeln(d()); // prints 25 }
auto foo() { int x = 4; pure int delegate() d = delegate() { return x*x; }; writeln(d()); // prints 16 x = 5; writeln(d()); // prints 25 return d; }I can see that after foo returns, then d will truly be pure as x will no longer be modifiable, but just before that, it seems d is not actually pure. Is this the intended behavior?