What am I missing? Pure constructor behaves differently when assigning string member
anonymous via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Nov 29 04:40:19 PST 2014
On Saturday, 29 November 2014 at 09:41:00 UTC, jostly wrote:
> I can't find a way to use a pure constructor to create both
> mutable and immutable instances of the same class, when one of
> the fields I assign is a string.
[...]
> The question is: am I missing something that would make it
> possible to use a pure constructor in this case, or is it
> simply not possible?
I ran some tests, as far as I can tell, they should all work:
mixin template test(T)
{
class C
{
T value;
this(T value_) pure {this.value = value_;}
}
static assert(is(typeof({auto c = new C(T.init);})));
static if(!is(typeof(new immutable C(T.init))))
pragma(msg, T, ": immutable construction fails");
static if(!is(typeof({immutable c = new C(T.init);})))
pragma(msg, T, ": unique construction fails");
}
/* No indirections (and no (d/w)char): all fine */
mixin test!int;
mixin test!(int[3]);
/* With indirections:
immutable construction fails
unique construction works */
mixin test!string;
mixin test!(immutable int[]);
mixin test!(immutable Object);
mixin test!(immutable int*);
/* No indirections, but (d/w)char:
immutable construction works
unique construction fails
Wat. */
mixin test!dchar;
mixin test!wchar;
mixin test!char;
mixin test!(dchar[3]);
More information about the Digitalmars-d-learn
mailing list