#include <cassert>
struct A {
virtual ~A() = default;
};
struct B : public A {
virtual ~B() = default;
};
struct C {
virtual ~C() = default;
};
struct a1 : public B, public C {
a1() = default;
virtual ~a1() = default;
}; // indirect inheritance of A
int main() {
a1 a;
C* c = &a;
assert(dynamic_cast<A*>(c) != nullptr);
return 0;
}
I2luY2x1ZGUgPGNhc3NlcnQ+CgpzdHJ1Y3QgQSB7Cgl2aXJ0dWFsIH5BKCkgPSBkZWZhdWx0Owp9OwoKc3RydWN0IEIgOiBwdWJsaWMgQSB7Cgl2aXJ0dWFsIH5CKCkgPSBkZWZhdWx0Owp9OwoKc3RydWN0IEMgewoJdmlydHVhbCB+QygpID0gZGVmYXVsdDsKfTsgCgpzdHJ1Y3QgYTEgOiBwdWJsaWMgQiwgcHVibGljIEMgewoJYTEoKSA9IGRlZmF1bHQ7Cgl2aXJ0dWFsIH5hMSgpID0gZGVmYXVsdDsKCQp9OyAvLyBpbmRpcmVjdCBpbmhlcml0YW5jZSBvZiBBCgppbnQgbWFpbigpIHsKCWExIGE7CgkKCUMqIGMgPSAmYTsKCQoJYXNzZXJ0KGR5bmFtaWNfY2FzdDxBKj4oYykgIT0gbnVsbHB0cik7CgkKCXJldHVybiAwOwp9