#include <iostream>
using namespace std;
struct A_Root {
int rootField;
};
struct B_Root {
int rootField;
};
struct B_Derived : public B_Root {
int derivedField;
};
struct C_Root {
C_Root() {
rootField = 924;
};
virtual ~C_Root() {
};
int rootField;
};
struct C_Sibling {
~C_Sibling() {
printf("called sibling dtor");
};
int siblingField;
int siblingField2;
};
struct C_Derived : public C_Root, public C_Sibling {
int derivedField;
};
int main() {
printf("A_Root: %d\n", sizeof(A_Root));
printf("\n");
printf("B_Root: %d / B_Derived: %d\n", sizeof(B_Root), sizeof(B_Derived));
printf("\n");
printf("C_Root: %d / C_Derived: %d / C_Sibling: %d\n", sizeof(C_Root), sizeof(C_Derived), sizeof(C_Sibling));
C_Root* derived = (C_Root*)new C_Derived();
(*derived).rootField = 3;
printf("derived: %d\n", sizeof(derived));
printf("rootField: %d\n", (*derived).rootField);
delete derived;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEFfUm9vdCB7CglpbnQgcm9vdEZpZWxkOwp9OwoKc3RydWN0IEJfUm9vdCB7CglpbnQgcm9vdEZpZWxkOwp9OwoKc3RydWN0IEJfRGVyaXZlZCA6IHB1YmxpYyBCX1Jvb3QgewoJaW50IGRlcml2ZWRGaWVsZDsKfTsKCgpzdHJ1Y3QgQ19Sb290IHsKCUNfUm9vdCgpIHsKCSAgcm9vdEZpZWxkID0gOTI0OwoJfTsKCQoJdmlydHVhbCB+Q19Sb290KCkgewoJfTsKCQoJaW50IHJvb3RGaWVsZDsKfTsKCnN0cnVjdCBDX1NpYmxpbmcgewoJfkNfU2libGluZygpIHsKCQlwcmludGYoImNhbGxlZCBzaWJsaW5nIGR0b3IiKTsKCX07CgkKCWludCBzaWJsaW5nRmllbGQ7CglpbnQgc2libGluZ0ZpZWxkMjsKfTsKCnN0cnVjdCBDX0Rlcml2ZWQgOiBwdWJsaWMgQ19Sb290LCBwdWJsaWMgQ19TaWJsaW5nIHsKCWludCBkZXJpdmVkRmllbGQ7Cn07CgppbnQgbWFpbigpIHsKCXByaW50ZigiQV9Sb290OiAlZFxuIiwgc2l6ZW9mKEFfUm9vdCkpOwoJCglwcmludGYoIlxuIik7CgkKCXByaW50ZigiQl9Sb290OiAlZCAvIEJfRGVyaXZlZDogJWRcbiIsIHNpemVvZihCX1Jvb3QpLCBzaXplb2YoQl9EZXJpdmVkKSk7CgkKCXByaW50ZigiXG4iKTsKCQoJcHJpbnRmKCJDX1Jvb3Q6ICVkIC8gQ19EZXJpdmVkOiAlZCAvIENfU2libGluZzogJWRcbiIsIHNpemVvZihDX1Jvb3QpLCBzaXplb2YoQ19EZXJpdmVkKSwgc2l6ZW9mKENfU2libGluZykpOwoJCglDX1Jvb3QqIGRlcml2ZWQgPSAoQ19Sb290KiluZXcgQ19EZXJpdmVkKCk7CgkKCSgqZGVyaXZlZCkucm9vdEZpZWxkID0gMzsKCiAgICBwcmludGYoImRlcml2ZWQ6ICVkXG4iLCBzaXplb2YoZGVyaXZlZCkpOwoJCglwcmludGYoInJvb3RGaWVsZDogJWRcbiIsICgqZGVyaXZlZCkucm9vdEZpZWxkKTsKCQoJZGVsZXRlIGRlcml2ZWQ7CgkKCXJldHVybiAwOwp9