Nick Sabalausky wrote:
"Jeremie Pelletier" <jerem...@gmail.com> wrote in message news:h9mmre$1i8...@digitalmars.com...
Ary Borenszweig wrote:
Object is not-nullable, Object? (or whatever syntax you like) is nullable. So that line is a compile-time error: you can't cast a null to an Object (because Object *can't* be null).

union A {
Object foo;
Object? bar;
}

Give me a type system, and I will find backdoors :)


Unions are nothing more than an alternate syntax for a reinterpret cast. And it's an arguably worse syntax because unlike casts, uses of it are indistinguishable from normal safe code, there's nothing to grep for. As such, unions should never be considered any more safe than cast(x)y. The following is just as dangerous as your example above and doesn't even touch the issue of nullability/non-nulability:

union A {
int foo;
float bar;
}


Yet it's the only way I know of to do bitwise logic on floating points in D to extract the exponent, sign and mantissa for example.

And yes they are much, much more than a simple reinterpret cast, a simple set of casts will not set the size of the union to its largest member. Unions make for elegant types which can have many valid representations:

union Vec3F {
        struct { float x, y, z; }
        float[3] v;
}

I just can't picture D without unions :)

Reply via email to