[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