https://issues.dlang.org/show_bug.cgi?id=15651
Issue ID: 15651 Summary: filter: only parameters or stack based variables can be inout Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nob...@puremagic.com Reporter: lt.infiltra...@gmail.com import std.algorithm.iteration : filter; import std.array : array; class D { int x; this(int n) { x = n; } } class C { @property auto fun() inout nothrow pure @safe { return members.filter!(m => m.x == 0).array; } D[] members; } void main() { auto c = new C; c.members = [ new D(0), new D(1) ]; auto foo = c.fun; } ============ Compilation output: /opt/compilers/dmd2/include/std/algorithm/iteration.d(980): Error: variable f534.C.fun.FilterResult!(__lambda1, inout(D)[]).FilterResult._input only parameters or stack based variables can be inout /opt/compilers/dmd2/include/std/algorithm/iteration.d(944): Error: template instance f534.C.fun.FilterResult!(__lambda1, inout(D)[]) error instantiating /d456/f534.d(8): instantiated from here: filter!(inout(D)[]) /d456/f534.d(8): Error: template std.algorithm.iteration.filter cannot deduce function from argument types !((m) => m.x == 0)(inout(D[])), candidates are: /opt/compilers/dmd2/include/std/algorithm/iteration.d(940): std.algorithm.iteration.filter(alias predicate) if (is(typeof(unaryFun!predicate))) ============ --