Thread overview | |||||
---|---|---|---|---|---|
|
July 27, 2018 How come isMutable returns true for structs that cannot be modified | ||||
---|---|---|---|---|
| ||||
import std.traits: isMutable; struct S { immutable int i = 3; } pragma(msg, isMutable!S); void main() { S s; s = S(); } And is there a trait that takes the transitivity of immutability in to account? Cheers, - Ali |
July 27, 2018 Re: How come isMutable returns true for structs that cannot be modified | ||||
---|---|---|---|---|
| ||||
Posted in reply to aliak | On 7/27/18 9:10 AM, aliak wrote: > import std.traits: isMutable; > struct S { > immutable int i = 3; > } > > pragma(msg, isMutable!S); > > void main() { > S s; > s = S(); > } isMutable only takes the type into account, it doesn't look to see if all the internals are mutable. It literally is this: enum bool isMutable(T) = !is(T == const) && !is(T == immutable) && !is(T == inout); > And is there a trait that takes the transitivity of immutability in to account? I think you are looking for https://dlang.org/phobos/std_traits.html#isAssignable -Steve |
July 27, 2018 Re: How come isMutable returns true for structs that cannot be modified | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Friday, 27 July 2018 at 14:48:06 UTC, Steven Schveighoffer wrote:
> On 7/27/18 9:10 AM, aliak wrote:
>> import std.traits: isMutable;
>> struct S {
>> immutable int i = 3;
>> }
>>
>> pragma(msg, isMutable!S);
>>
>> void main() {
>> S s;
>> s = S();
>> }
>
> isMutable only takes the type into account, it doesn't look to see if all the internals are mutable.
>
> It literally is this:
>
> enum bool isMutable(T) = !is(T == const) && !is(T == immutable) && !is(T == inout);
>
>> And is there a trait that takes the transitivity of immutability in to account?
>
> I think you are looking for https://dlang.org/phobos/std_traits.html#isAssignable
>
> -Steve
Ah! Yes I think I am. Thanks!
|
Copyright © 1999-2021 by the D Language Foundation