On Friday, 6 July 2018 at 14:28:39 UTC, Steven Schveighoffer
wrote:
inout is not a compile-time wildcard, it's a runtime one. So it
doesn't know how to convert an immutable to an inout.
Essentially, inside this function, the compiler has no idea
whether the real thing is an immutable, const, mutable, etc.
The fix is simple, replace both your constructors with one
inout constructor:
this(inout(S) t) inout { this.s = t; }
Slowly getting acquainted to inout... Feels like magic.
And it will work for everything.
One word of caution though -- inout is viral (just like
immutable). Everything you use has to support it, or it breaks
down.
"viral" is very fitting. Throw in pure and I quickly reach the
bottom of my program hitting a library function I used which is
not pure.
I never really used 'pure' and just now found a use case with
immutable [1], i.e. to return unique objects from functions which
can be assigned to a mutable or immutable reference.
What other "use cases" or reasons to use 'pure' are there (aside
from compiler optimizations)?
[1]:
https://forum.dlang.org/post/nmcnuenazaghjlxod...@forum.dlang.org