#define THREE
struct Base {
int t_size;
Base (int i) : t_size(i) {}
virtual ~Base () {}
int size () const { return t_size; };
};
struct D1 : virtual Base {
int a[10];
D1 () : Base(0) {}
~D1 () {}
};
struct D2 : virtual Base {
int a[20];
D2() : Base(0) {}
~D2 () {}
};
#ifdef ONE
struct Derived : Base
#endif
#ifdef TWO
struct Derived : virtual Base
#endif
#ifdef THREE
struct Derived : D1, D2
#endif
{
Derived () : Base(0) {}
~Derived () {}
int a[100];
};
void foo (Derived *p)
{
if(p->size())
return;
p = 0;
}
int main ()
{
Derived d;
foo(&d);
}
I2RlZmluZSBUSFJFRQoKc3RydWN0IEJhc2UgewogIGludCB0X3NpemU7CiAgQmFzZSAoaW50IGkpIDogdF9zaXplKGkpIHt9CiAgdmlydHVhbCB+QmFzZSAoKSB7fQogIGludCBzaXplICgpIGNvbnN0IHsgcmV0dXJuIHRfc2l6ZTsgfTsKfTsKCnN0cnVjdCBEMSA6IHZpcnR1YWwgQmFzZSB7CiAgaW50IGFbMTBdOwogIEQxICgpIDogQmFzZSgwKSB7fQogIH5EMSAoKSB7fQp9OwpzdHJ1Y3QgRDIgOiB2aXJ0dWFsIEJhc2UgewogIGludCBhWzIwXTsKICBEMigpIDogQmFzZSgwKSB7fQogIH5EMiAoKSB7fQp9OwoKI2lmZGVmIE9ORQpzdHJ1Y3QgRGVyaXZlZCA6IEJhc2UKI2VuZGlmCiNpZmRlZiBUV08Kc3RydWN0IERlcml2ZWQgOiB2aXJ0dWFsIEJhc2UKI2VuZGlmCiNpZmRlZiBUSFJFRQpzdHJ1Y3QgRGVyaXZlZCA6IEQxLCBEMgojZW5kaWYKewogIERlcml2ZWQgKCkgOiBCYXNlKDApIHt9CiAgfkRlcml2ZWQgKCkge30KICBpbnQgYVsxMDBdOwp9OwoKCnZvaWQgZm9vIChEZXJpdmVkICpwKSAKewogIGlmKHAtPnNpemUoKSkKICAgIHJldHVybjsKICBwID0gMDsKfQoKaW50IG1haW4gKCkKewogIERlcml2ZWQgZDsKICBmb28oJmQpOwp9Cg==