https://issues.dlang.org/show_bug.cgi?id=9148
--- Comment #16 from [email protected] --- (In reply to Kenji Hara from comment #11) > I'm adjusting the implicit pure annotation behavior for nested functions in: > https://github.com/D-Programming-Language/dmd/pull/4344 > > If the nested function is a template, attribute inference is preferred and > pure will be added only when the function is accessing enclosing pure > function context. > > auto foo() pure { > int x; > auto bar()() { // template function bar can be impure by default > // bar will be forced to get weak purity, only when it's trying > // to access enclosing pure function context. > //x = 1; > > // otherwise, bar can call impure functions and then > // it will be inferred to impure. > impureFuncCall(). > } > } > > Once nested template function is inferred to impure, it cannot access > enclosing pure context anymore. > > auto foo() pure { > int x; > auto bar()() { > impureFuncCall(). > x = 1; // Error: impure function 'bar' cannot access variable 'x' > // declared in enclosing pure function 'foo' > } > } I think this is not right. Why should impure nested functions not be able to access the enclosing context corresponding to frames of pure functions? --
