On Thursday, 3 May 2012 at 06:00:58 UTC, Mehrdad wrote:
I believe all of these static assertions (and some variants thereof) should pass, due to the semantics of const, immutable, and shared.

...

Do people agree?

This doesn't even pass:
static assert(is(Immutable == Immutable));

The straightforward answer to this is that you really ought to have a main method :-)

import std.stdio;

immutable struct Immutable {}
const struct Const {}
shared struct Shared {}

void main() {
    static assert(is(Immutable == immutable(Immutable)));
    static assert(is(Immutable == const(Immutable)));
    static assert(is(Immutable == shared(Immutable)));
    static assert(is(Const == const(Const)));
    //static assert(is(Const == shared(Const))); // Doesn't pass
    static assert(is(Shared == shared(Shared)));
}

Also, what exactly is the difference between declaring a struct as immutable or as const? Aren't they unmodifiable either way?

Since const != shared, that's probably the main difference. IMO, I'd probably never see a point to making a const struct, so I'd prefer to always declare it immutable.

Reply via email to