is this a bug with writeln / std.algorithm.remove?

arturg var.spool.mail700 at gmail.com
Fri Feb 16 11:45:21 UTC 2018


this code fails to compile:

     void delegate(void*) dg;
     void delegate(void*)[] dgs = [dg, dg, dg];
     dgs.writeln;
     dgs.remove(1).writeln();

if you comment out dgs.writeln; it works as expected,
it works if you use other types then void*:

     void delegate(int*) dg;
     void delegate(int*)[] dgs = [dg, dg, dg];
     dgs.writeln;
     dgs.remove(1).writeln();


the compiler is DMD64 D Compiler v2.078.2 and the error message 
is:

/usr/include/dlang/dmd/std/algorithm/mutation.d(1929): Error: 
template std.algorithm.mutation.moveAll cannot deduce function 
from argument types !()(void delegate(void*)[], void 
delegate(void*)[]), candidates are:
/usr/include/dlang/dmd/std/algorithm/mutation.d(1455):        
std.algorithm.mutation.moveAll(InputRange1, 
InputRange2)(InputRange1 src, InputRange2 tgt) if 
(isInputRange!InputRange1 && isInputRange!InputRange2 && 
is(typeof(move(src.front, tgt.front))))
empty.d(9): Error: template instance 
std.algorithm.mutation.remove!(cast(SwapStrategy)2, void 
delegate(void*)[], int) error instantiating


More information about the Digitalmars-d-learn mailing list