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?

Reply via email to