How come isMutable returns true for structs that cannot be modified

Steven Schveighoffer schveiguy at gmail.com
Fri Jul 27 14:48:06 UTC 2018


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


More information about the Digitalmars-d-learn mailing list