Given the lack of feedback, I'm sending a sample scenario and results:

    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;
        }
    }

    void main()
    {
        Foo a;
        Foo b;
        b.i = 0x7ff7a502;
        copy(&a, &b);
        writef("%x\n", a.i);
        writeln(a.d);
    }

Linux (32-bits):

    $ dmd -version=one test.d && ./test
    7ff7a502
    nan

    $ dmd -version=two test.d && ./test
    7fffa502  <-- different
    nan

OS X (64-bits, binary forced to 32-bits):

    $ dmd -m32 -version=one test.d && ./test
    7ff7a502
    nan

    $ dmd -m32 -version=two test.d && ./test
    7ff7a502   <-- equal
    nan

Reply via email to