[Issue 9792] length field of a const SortedRange

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Apr 30 13:46:20 UTC 2020


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

Witold Baryluk <witold.baryluk+d at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |witold.baryluk+d at gmail.com

--- Comment #4 from Witold Baryluk <witold.baryluk+d at gmail.com> ---
I got similar issues with constness, in other cirumstances. `opIndex` and
`opSlice` could be made const too, if they return const range or SortedRange,
and underlying Range is const.

I have a method like this:

void search(Range, T)(in T[] needles, in SortedRange!(Range) haystack, long[]
ret, const long index_offset) {

it is called as search(needles, assumeSorted(kaystack), ret, 0);


but the body of this function does pose issues:

search.d:67:7: error: mutable method std.range.SortedRange!(const(int)[], "a <
b").SortedRange.length is not callable using a const object
   67 |   if (haystack.length == 0) {
      |       ^
search.d:83:17: error: mutable method std.range.SortedRange!(const(int)[], "a <
b").SortedRange.opIndex is not callable using a const object
   83 |     if (haystack[i] == needles[j]) {


This is with gdc 9.3.0-11 and libgphobos76 9.3.0-11.



It looks like automatic inference of const methods, or specialization of const
and non-const (at the cost of repeating the same code twice) is required to
make it work.

--


More information about the Digitalmars-d-bugs mailing list