Why does inputRangeObject fail to derive correctly for RandomAccessInfinite ranges?

Paul Backus snarwin at gmail.com
Sat Jul 16 12:40:09 UTC 2022


On Saturday, 16 July 2022 at 08:40:10 UTC, D Lark wrote:
> On Wednesday, 13 July 2022 at 01:40:43 UTC, Paul Backus wrote:
>> On Wednesday, 13 July 2022 at 01:23:35 UTC, D Lark wrote:
>>> First, please can someone clarify if the behaviour I expect 
>>> in the last line is consistent with the intention of the 
>>> library?
>>
>> Yes, it should behave the way you expect. The current behavior 
>> is a bug.
>>
>> I've submitted a report for it here: 
>> https://issues.dlang.org/show_bug.cgi?id=23242
>
> It looks like the resolution is that this can't be fixed? I'm 
> not sure I understand the conclusion. What does this mean for 
> this part of the library then? Should the 
> RandomAccessInfinite!E interface be removed since it's not 
> fully supported?

The interface works fine, it's just that the `InputRangeObject!R` 
instance itself does not satisfy `isRandomAccessRange`:

```d
auto seqObj  = sequence!((a, n) => n).inputRangeObject;
RandomAccessInfinite!size_t seqIface = seqObj;

static assert( isRandomAccessRange!(typeof(seqIface))); // 
interface passes
static assert(!isRandomAccessRange!(typeof(seqObj))); // object 
fails
```

So if you code to the interfaces and ignore the concrete type of 
the range object, you should not have any problems.


More information about the Digitalmars-d-learn mailing list