Implicit cast to immutable
    Daniel Murphy 
    yebblies at nospamgmail.com
       
    Sat Oct 15 20:05:43 PDT 2011
    
    
  
The implicit conversion to immutable is only possible inside strongly pure 
functions.  When the parameter is 'in int[]' foo cannot be strongly pure, 
only const pure.  As 'in int[2]' is a value type, the second foo can be 
strongly pure.
'new' expressions will hopefully be able to be converted to immutable 
eventually, along with array concatenation and array.dup.
It is also likely that the following will be valid code (const pure foo 
called with immutable arguments)
int[] foo(in int[] x) pure {
   return new int[1];
}
void main() {
  immutable x = foo([1, 2, 3].idup);
}
"bearophile" <bearophileHUGS at lycos.com> wrote in message 
news:j6iom9$2g1m$1 at digitalmars.com...
> Do you know why this program doesn't compile (with DMD 2.056head)?
>
>
> immutable(int[]) foo(in int[] x) pure {
>    return new int[1];
> }
> void main() {}
>
>
> It gives:
> test.d(2): Error: cannot implicitly convert expression (new int[](1u)) of 
> type int[] to immutable(int[])
>
> This program instead compiles (now x is int[2] instead of int[]):
>
> immutable(int[]) foo(in int[2] x) pure {
>    return new int[1];
> }
> void main() {}
>
>
> Bye and thank you,
> bearophile 
    
    
More information about the Digitalmars-d-learn
mailing list