May 24, 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)));
1 2
Next ›   Last »