[Issue 23453] New: Generic iota should be a forward range

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Nov 3 11:57:48 UTC 2022


https://issues.dlang.org/show_bug.cgi?id=23453

          Issue ID: 23453
           Summary: Generic iota should be a forward range
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: phobos
          Assignee: nobody at puremagic.com
          Reporter: snarwin+bugzilla at gmail.com

As of Phobos v2.100.2, the generic version of std.range.iota used for
non-numeric types is not a forward range, because it does not implement the
`save` method:

---
import std.range;

void main()
{
        auto r1 = iota('a', 'z');
        auto r2 = r1.save;  // Error
}
---

However, iota stores all of its state internally, and copies of it can be
iterated independently:

---
import std.range;

void main()
{
        auto r1 = iota('a', 'z');
        auto r2 = r1;
        r1.popFront;
        assert(r2.front == 'a'); // OK
}
---

Since it is already effectively a forward range in practice, iota should
implement `save` and make this functionality available to generic algorithms.

--


More information about the Digitalmars-d-bugs mailing list