This is slightly related to this issue I reported earlier: https://forum.dlang.org/post/wghdwxptjfcjwptny...@forum.dlang.org

Here's the snippet that captures what fails for me

```dlang
import std.range: ElementType, isRandomAccessRange, inputRangeObject, sequence, MostDerivedInputRange, RandomAccessInfinite;

    auto seq = sequence!((a, n) => n);
    alias SeqType = typeof(seq);
    static assert(isRandomAccessRange!SeqType);

static assert(is(MostDerivedInputRange!SeqType == RandomAccessInfinite!(ElementType!SeqType)));

    auto seqInputRange = seq.inputRangeObject;
static assert(isRandomAccessRange!(typeof(seqInputRange))); // returns 'false'; I expect this to return 'true' as the most derived type of 'seq' is of 'RandomAccessInfinite' as demonstrated above

```
I am compiling using dmd v2.100.1

First, please can someone clarify if the behaviour I expect in the last line is consistent with the intention of the library?

I have poked around the source and I can see that the `InputRangeObject` (the object returned by `inputRangeObject` derives from the return type of the `MostDerivedInputRange` template, which as shown above returns the correct interface. However it seems that the implementation of `InputRangeObject` does not implement `enum bool empty = false` in the case of the `RandomAccessInfinite` ranges, which leads to the template `isRandomAccessRange` returning false.

Reply via email to