Implicit cast to const of result returned from findSplit()
    Jacob Carlborg 
    doob at me.com
       
    Tue Nov  6 10:19:42 UTC 2018
    
    
  
On 2018-11-05 14:26, Per Nordlöw wrote:
> Why does
> 
> @safe pure unittest
> {
>      import std.algorithm.searching : findSplit;
>      if (const split = "a b".findSplit(" "))
>      {
>      }
> }
> 
> error as
> 
> f.d(4,5): Error: mutable method `std.algorithm.searching.findSplit!("a 
> == b", string, string).findSplit.Result!(string, 
> string).Result.opCast!bool.opCast` is not callable using a `const` object
> f.d(4,5):        Consider adding `const` or `inout` to 
> std.algorithm.searching.findSplit!("a == b", string, 
> string).findSplit.Result!(string, string).Result.opCast!bool.opCast
> 
> when
> 
> @safe pure unittest
> {
>      import std.algorithm.searching : findSplit;
>      if (auto split = "a b".findSplit(" "))
>      {
>      }
> }
> 
> doesn't?
> 
> AFAICT, it looks like a missing bool qualifier on `opCast!bool`, right?
If the first example you declare a const variable of the type that 
"findSplit" returns. Then the compiler will call opCast since the 
variable is defined in the if condition. But you can only call methods 
marked as "const" if you have a const variable. The opCast method  in 
the struct returned by "findSplit" is missing a const attribute.
-- 
/Jacob Carlborg
    
    
More information about the Digitalmars-d-learn
mailing list