On 10/21/2013 07:47 PM, "Luís Marques" <[email protected]>" wrote:

> Consider the following on a 32-bit system:
>
>      union Foo
>      {
>          struct
>          {
>              void* v;
>              int i;
>          }
>
>          double d;
>      }
>
>      static assert(Foo.sizeof == 8);
>
>      void copy(Foo* a, Foo* b)
>      {
>          version(one)
>          {
>              a.v = b.v;
>              a.i = b.i;
>          }
>          version(two)
>          {
>              a.d = b.d;
>          }
>      }
>
> Is there a difference between version one and version two? I was getting
> erroneous copies with version two on Linux and Windows, while it worked
> fine on OS X. Does it make a difference if the double is a NaN?

If D's unions are like C's and C++'s, then it is not defined what happens when accessing members of the union that are not active.

Either the anonymous struct or 'd' above is active, so only that member can be accessed.

Ali

Reply via email to