[Issue 15651] New: filter: only parameters or stack based variables can be inout
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sun Feb 7 01:28:35 PST 2016
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: nobody at puremagic.com
Reporter: lt.infiltrator at 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)))
============
--
More information about the Digitalmars-d-bugs
mailing list