Thread overview
contains method on immutable sorted array
Oct 21, 2019
Andrey
Oct 21, 2019
Nicholas Wilson
Oct 22, 2019
Andrey
October 21, 2019
Hello,
I have got a global constant immutable array:
> immutable globalvalues = sort(cast(wstring[])["й", "ц", "ук", "н"]);

Somewhere in program I want to check an existance:
> globalvalues.contains("ук"w).writeln;

But get an error:
> Error: template std.range.SortedRange!(wstring[], "a < b").SortedRange.contains cannot deduce function from argument types !()(wstring) immutable, candidates are:
> /dlang/ldc-1.17.0/bin/../import/std/range/package.d(10993):
> std.range.SortedRange!(wstring[], "a < b").SortedRange.contains(V)(V value) if (isRandomAccessRange!Range)

Why I can't check?
October 21, 2019
On Monday, 21 October 2019 at 10:14:54 UTC, Andrey wrote:
> Hello,
> I have got a global constant immutable array:
>> immutable globalvalues = sort(cast(wstring[])["й", "ц", "ук", "н"]);
>
> Somewhere in program I want to check an existance:
>> globalvalues.contains("ук"w).writeln;
>
> But get an error:
>> Error: template std.range.SortedRange!(wstring[], "a < b").SortedRange.contains cannot deduce function from argument types !()(wstring) immutable, candidates are:
>> /dlang/ldc-1.17.0/bin/../import/std/range/package.d(10993):
>> std.range.SortedRange!(wstring[], "a < b").SortedRange.contains(V)(V value) if (isRandomAccessRange!Range)
>
> Why I can't check?

pragma(msg,typeof(globalvalues));

gives immutable(SortedRange!(wstring[], "a < b"))

and

(cast(SortedRange!(wstring[], "a < b"))globalvalues).contains("ук"w).writeln;

works, so I guess contains doesn't work with immutable?
If you can do some more research into this and confirm it then, please file a bug report.
October 22, 2019
On Monday, 21 October 2019 at 20:44:29 UTC, Nicholas Wilson wrote:
> works, so I guess contains doesn't work with immutable?
> If you can do some more research into this and confirm it then, please file a bug report.

As I understand - yes. It doesn't work with immutable object.
Also I see the same problem with 'const' and 'shared' object:
> shared values = sort(cast(wstring[])["й", "ц", "ук", "н"]);
> const values = sort(cast(wstring[])["й", "ц", "ук", "н"]);
> values.contains("ук"w).writeln; // error

So you think it is a bug in compiler?