Consider the following two structs:

```
struct A
{
    // A bunch of standard layout data
};

struct B:public A
{
    // Other data
};

```

And an object

```
B foo;

```

Supposing sizeof(A) does not differ between the compilers, the packing is the same and B does not add any virtual methods, will foo have the A members at the same address relative to &foo when compiling using gcc or msvc for the Windows x86 or x86-64 platform?

EDIT: I relized that the best way to implement inheritance is to place A before B. Otherwise, upcast would require offseting the this pointer by sizeof(B) which is silly. At least GCC puts the content of B after the content of A.