On Monday, 4 April 2016 at 08:10:10 UTC, Edwin van Leeuwen wrote:
Is there a way to make sure a delegate only reads state, without changing it? I tried annotating the delegate as const, but that does not seem to work.


Note that annotating with pure also doesn't help. As a result we can have a pure delegate that returns different results every time it is called.

```D
void main()
{
    import std.stdio : writeln;
    auto r = [0,1,2,3];

    auto f = delegate() const pure
    {
        import std.array : front, popFront;
        r.popFront;
        return r.front;
    };

    r.writeln; // [0,1,2,3]
    auto f1 = f();
    r.writeln; // [1,2,3]
    assert( f() == f1 ); // Throws
}
```

Reply via email to