error with std.range.put - readN

Baz via Digitalmars-d digitalmars-d at puremagic.com
Mon May 4 07:33:22 PDT 2015


the following program fails because of the `put` function :

---
import std.stdio;
import std.range;

size_t readN(T, Range)(ref Range src, ref Range dst, size_t n)
if (isInputRange!Range && isOutputRange!(Range, T))
{
     size_t result;

     while(1)
     {
         if (src.empty || result == n)
             break;

         put(dst, src.front()); // here
         src.popFront;

         ++result;
     }


     return result;
}

void main(string[] args)
{
     int[] src = [1,2,3];
     int[] dst = [0];

     auto n = readN!int(src, dst, 2);

     writeln(dst);
}
---

If i replace `put` by a cat op (`~`) it works, however the cat op 
only works here because i test the template with two int[].

What's wrong ?


More information about the Digitalmars-d mailing list