Why ByChunk is not regnize by st.range.takeOne and why Section has no value
bioinfornatics via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Nov 3 13:03:51 PST 2014
On Monday, 3 November 2014 at 06:43:50 UTC, Ali Çehreli wrote:
> On 11/02/2014 04:58 PM, bioinfornatics wrote:
>
> > Dear,
> > Some problem to build this code:
> http://fpaste.org/147327/75948141/
> >
> >
> > $ ldc2 fasta_test.d
> > /usr/include/d/std/range.d(3605): Error: template
> std.array.save
> > cannot deduce function from argument types !()(ByChunk),
> > candidates are:
>
> I think that is due to the too permissive template constraint
> of takeOne in phobos/std/range.d. Even though it say
> "isInputRange!R", it clearly needs "isForwardRange!R" because
> it calls .save() on that range:
>
> @property auto save() { return Result(_source.save, empty);
> }
>
> So, the following is wrong:
>
> auto takeOne(R)(R source) if (isInputRange!R)
>
> It should be:
>
> auto takeOne(R)(R source) if (isForwardRange!R)
>
> If you modify range.d locally to require ForwardRange, you will
> see that your following call will get an error message because
> byChunk is not a ForwardRange:
>
> // Take a piece of byte from current file
> ubyte[] buffer = takeOne(inputRange);
>
> I think this issue is already reported as a part of the
> following bug:
>
> https://issues.dlang.org/show_bug.cgi?id=9724
>
> Ali
Ok but I do not see why to use save method for a takeOne function
is possible to write this function without to use it
More information about the Digitalmars-d-learn
mailing list