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