www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 15651] New: filter: only parameters or stack based variables

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 puremagic.com
          Reporter: lt.infiltrator 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)))
============

--
Feb 07 2016