immutable ctors, immutable members, and TDPL
TommiT
tommitissari at hotmail.com
Fri May 24 08:29:44 PDT 2013
On Thursday, 23 May 2013 at 15:41:32 UTC, Steven Schveighoffer
wrote:
> An interesting subject is being debated by some of the heavy
> hitters of D on the latest beta on the announce NG.
>
> However, I have found that there is an inconsistency in TDPL
> that needs to be addressed.
>
> Forgetting the controversy currently brewing, we have the
> following current situation:
>
> struct S
> {
> immutable int x;
> this(int n)
> {
> x = n;
> int y = x;
> x = 0;
> }
> }
>
> This compiles, and shows that one can use an immutable, and
> then the immutable can be changed. This is no good, for
> obvious reasons.
I think immutable is something you cannot change. Also, the
reverse is true, if you can change something, it's not immutable.
According to this logic, x is not immutable inside the scope of
the constructor, because you *can* change it. Therefore it should
be so that:
import std.traits;
struct S
{
immutable int x;
this(int n)
{
static assert(isMutable!(typeof(x)));
}
}
static assert(!isMutable!(typeof(S.init.x)));
More information about the Digitalmars-d
mailing list