Can't call splitter with range struct

drug drug2004 at bk.ru
Tue Mar 16 07:43:18 UTC 2021


On 3/16/21 1:58 AM, David Skluzacek wrote:
 >
 > Error: template std.algorithm.iteration.splitter cannot deduce 
function from argument types !()(GZippedFile, string), candidates are:
 > /usr/include/dlang/dmd/std/algorithm/iteration.d(4678): 
splitter(alias pred = "a == b", Range, Separator)(Range r, Separator s)
 >    with pred = "a == b",
 >         Range = GZippedFile,
 >         Separator = string
 >    must satisfy the following constraint:
 >         is(typeof(binaryFun!pred(r.front, s)) : bool)

That means that you should be able to call your predicate ("a == b") 
with GZippedFile.front and separator as arguments (they are dchar and 
string respectively)

 > (...)
 >
 > If I change the newline separator to a character literal, I get:
 >
 > (...)
 > /usr/include/dlang/dmd/std/algorithm/iteration.d(5055): 
splitter(alias pred = "a == b", Range, Separator)(Range r, Separator s)
 >    with pred = "a == b",
 >         Range = GZippedFile,
 >         Separator = char
 >    must satisfy the following constraint:
 >         is(typeof(binaryFun!pred(r.front, s.front)) : bool)
 >
 > It seems like "\n" should pass the second constraint and '\n' should 
pass the first.  Using a dchar or dstring makes no difference. Adding 
@property to front makes no difference. Is this a bug?
 >

Also there are other constraints (see https://run.dlang.io/is/rcSJJf)
like:
/dlang/ldc-1.25.1/bin/../import/std/algorithm/iteration.d(5055): 
splitter(alias pred = "a == b", Range, Separator)(Range r, Separator s)
   with pred = "a == b",
        Range = GZippedFile,
        Separator = string
   must satisfy one of the following constraints:
        hasSlicing!Range
        isNarrowString!Range

That means that you GZippedRange should provide opSlice operator and 
should be a narrow string (string of char or wchar)


More information about the Digitalmars-d-learn mailing list