[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