www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 12912] New: Lambda function is incorrectly inferred as impure

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

          Issue ID: 12912
           Summary: Lambda function is incorrectly inferred as impure if
                    it uses member field or function
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: rejects-valid
          Severity: regression
          Priority: P1
         Component: DMD
          Assignee: nobody puremagic.com
          Reporter: verylonglogin.reg gmail.com

This code should compile:
---
struct S(alias fun)
{ void f() { fun(); } }

class C
{
    int n;

    void f() pure
    {
        S!(() => n) s; // `() pure => n` works
        s.f(); // line 11
    }
}
---
main.d(11): Error: pure function 'main.C.f' cannot call impure function
'main.C.f.S!(delegate () => this.n).S.f'
---

This breaks lots of `std.algorithm` usages in `pure` functions.

--
Jun 13 2014