On Thu, 02 Jun 2011 14:17:26 -0400, Andrej Mitrovic <n...@none.none> wrote:

import std.range;

void main()
{
    auto arr = [1, 2, 3, 4, 5, 6, 7, 8];
    auto foo = cycle(arr);
   // nope
    foreach (int index, int val; foo)
    {
    }
   // nope
    foreach (int index, int val; take(foo, 5))
    {
    }
   // ok
    foreach (int index, int val; take(arr, 5))
    {
    }
}

Is this because cycle is an infinite range, and index might overflow? I could understand that. But I think if I use take() then there should be no problem with overflows. It still doesn't work though.

As bearophile says, there is no standard for the index portion of a range (except for slices, which also happen to be ranges) during foreach.

The reason take(arr, 5) works is because it translates to arr[0..5] which is a slice.

-Steve

Reply via email to