How come isMutable returns true for structs that cannot be modified

aliak something at something.com
Fri Jul 27 15:18:33 UTC 2018


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!




More information about the Digitalmars-d-learn mailing list