On Fri, Sep 26, 2014 at 05:35:20PM -0700, Andrei Alexandrescu via Digitalmars-d 
wrote:
> On 9/26/14, 4:32 PM, Steven Schveighoffer wrote:
> >On 9/26/14 6:32 PM, H. S. Teoh via Digitalmars-d wrote:
> >
> >>Does the compiler infer it as @safe, though?
> >
> >Hm... good point, I'm not sure if unions are considered @safe. But I
> >think that would be a decent enhancement request if not.
> 
> I'd say certain unions may be deemed safe. -- Andrei

Hmm. I tried playing with the idea of unions being safe if all members
have the same unqualified type, but quickly ran into some nasty cases:

        union U {
                void delegate() @system sysDg;
                void delegate() @safe safeDg;
        }

Is this union @safe or not? Technically, it should be, since there's no
possibility of getting an invalid pointer to delegate using U. However,
it also breaks @safe-ty if you assign U.sysDg and call U.safeDg. (This
is currently accepted by the compiler, btw. In @safe code.)

And what of:

        union U {
                immutable int x;
                int y;
        }

? This one breaks the type system. It's certainly @safe, but has other
issues. (The compiler happily accepts this one, BTW.)

I think bug reports are in order. :-)

There's also the question of what to do with class references:

        class Base {}
        class Derived : Base {}
        union U {
                Base b;
                Derived d;      // fortunately, the compiler rejects this
        }

I'm sure there are many more such tricky corner cases that people can
dream up if they only use their imagination a little.


T

-- 
"Maybe" is a strange word.  When mom or dad says it it means "yes", but when my 
big brothers say it it means "no"! -- PJ jr.

Reply via email to