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?

Reply via email to