On Thursday, 20 December 2018 at 15:17:31 UTC, Steven
Schveighoffer wrote:
It's really how opEquals is marked.
opEquals for structs (without a specific implementation), is
marked as a combination of comparing all the fields, whatever
they are marked. Any basic types are comparable whether they
are const or not. So most likely the range struct's opEquals is
marked const.
However, popFront is likely not const. In some rare cases it
can be (i.e. an infinite range of a single value). If the range
cannot be operated, isInputRange returns false.
-Steve
I know about promotion / implicit casting, but I always find this
is a but awkward when comparing objects or structs it's equal but
acts differently.
But I'm may be the minority. :)
Marko.