Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
June 22, 2012 immutable ref foreach on values | ||||
---|---|---|---|---|
| ||||
Is this expected and good? void main() { int[] array = [1, 2]; foreach (ref const(int) x; array) {} // OK foreach (ref immutable(int) x; array) {} // error } DMD 2.060alpha: temp.d(4): Error: argument type mismatch, int to ref immutable(int) Thank you, bye, bearophile |
June 22, 2012 Re: immutable ref foreach on values | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Friday, 22 June 2012 at 11:07:14 UTC, bearophile wrote:
> Is this expected and good?
>
>
> void main() {
> int[] array = [1, 2];
> foreach (ref const(int) x; array) {} // OK
> foreach (ref immutable(int) x; array) {} // error
> }
>
>
> DMD 2.060alpha:
> temp.d(4): Error: argument type mismatch, int to ref immutable(int)
>
> Thank you,
> bye,
> bearophile
I think it's good. In this special case, the compiler can see that you can't change array behind his back. That seems not to be true in general.
|
June 22, 2012 Re: immutable ref foreach on values | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tobias Pankrath | Tobias Pankrath:
> I think it's good. In this special case, the compiler can see that you can't change array behind his back. That seems not to be true in general.
But aren't int implicitly castable to immutable?
Bye,
bearophile
|
June 22, 2012 Re: immutable ref foreach on values | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 22-Jun-12 16:16, bearophile wrote: > Tobias Pankrath: > >> I think it's good. In this special case, the compiler can see that you >> can't change array behind his back. That seems not to be true in general. > > But aren't int implicitly castable to immutable? > then every array is implicitly castable to tail immutable. int[] array = [1, 2]; foreach (ref immutable(int) x; array) { ... func(arr); // arr is mutable, thus func can change x // so x can be at most const } -- Dmitry Olshansky |
June 22, 2012 Re: immutable ref foreach on values | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dmitry Olshansky | Dmitry Olshansky:
> then every array is implicitly castable to tail immutable.
> int[] array = [1, 2];
>
> foreach (ref immutable(int) x; array) {
> ...
> func(arr); // arr is mutable, thus func can change x
> // so x can be at most const
> }
I understand, thank you :-)
Bye,
bearophile
|
Copyright © 1999-2021 by the D Language Foundation