When is array-to-array cast legal, and what does actually happen?
Ali Çehreli
acehreli at yahoo.com
Mon Feb 22 14:51:04 PST 2010
Is the following cast legal with dmd 2.040?
struct MyChar
{
dchar d;
this(dchar param)
in {
assert(false); // not called
}
body
{
d = param;
assert(d != param); // not called
}
this(this)
in {
assert(false); // not called
}
body
{
assert(d != d); // not called
}
}
void main()
{
MyChar[] mine = cast(MyChar[])("hello"d); // legal?
assert(mine[0].d == 'h');
}
I see that neither the constructor nor the postblit is called.
Apparently the bit representation is used. This has the risk of
violating struct invariants.
Is it legal?
Thank you,
Ali
More information about the Digitalmars-d-learn
mailing list