On Saturday, 19 April 2014 at 12:26:16 UTC, Andrej Mitrovic via Digitalmars-d-learn wrote:
On 4/19/14, Lars T. Kyllingstad via Digitalmars-d-learn
<digitalmars-d-learn@puremagic.com> wrote:
Say I have two structs, defined like this:

     struct A { /* could contain whatever */ }

     struct B { A a; }

My question is, is it now guaranteed that A.sizeof==B.sizeof?

The best thing to do is add a static assert and then you can relax:

That's what I've done, but it would be nice to know the code won't break due to some combination of platform and/or compiler switches I didn't think to test. Anyway, I've played around a bit, and found that a combination of struct and field alignment *can* break my assumption:

    align(1) struct A
    {
        char c;
        align(1) int i;
    }

    struct B { A a; }

Now, A.sizeof is 5, while B.sizeof is 8. I'd have to add align(1) to the declaration of B to fix it.
  • Struct size Lars T. Kyllingstad via Digitalmars-d-learn
    • Re: Struct size Andrej Mitrovic via Digitalmars-d-learn
    • Re: Struct size Lars T. Kyllingstad via Digitalmars-d-learn

Reply via email to