On 4/13/18 4:15 PM, Steven Schveighoffer wrote:

I don't know if the compiler can determine if a version statement affects the layout, I suppose it could, but it would have to compile both with and without the version to see. It's probably an intractable problem.


Even when the layout is affected, it may not be a problem.

For example, in std.internal.cstring, we have this:

    version(unittest)
    // the 'small string optimization'
    {
        // smaller size to trigger reallocations. Padding is to account for
        // unittest/non-unittest cross-compilation (to avoid corruption)
        To[16 / To.sizeof] _buff;
        To[(256 - 16) / To.sizeof] _unittest_pad;
    }
    else
    {
        To[256 / To.sizeof] _buff; // production size
    }

This results in the same size type whether you compile with unittests or not.

Even if the compiler can tell "something's not the same", it may not be a problem, as in this case.

-Steve

Reply via email to