
It does. It says that members of a struct or class (even non-POD ones, which I think is a useless restriction) that have no intervening access specifier are stored in memory in the same order as they are declared.
[snip]
What I personally don't understand is why private members - or in fact all members of non-PODs - can't always be re-ordered. It's not like anyone should ever depend on their order. It probably was C compatibility that there were any guarantees at all.
Binary compatibility is one reason: you need a guideline that allows compilers to agree on class layout. It's a pain, but it's necessary if ever you're to compile a .h in two separate places (and even in two different compiler versions, to some extent) and have the same class layout. JF