1// test of rtti of single inheritance and multiple inheritance classes 2// Special g++ Options: -frtti 3 4#include <typeinfo> 5 6extern "C" { 7 int printf(const char *, ...); 8 void exit(int); 9} 10 11class X { 12 public: 13 int xi; 14}; 15 16class Y : public X { 17 short ys; 18}; 19 20class Z : public Y { 21 int zi; 22}; 23 24Z z; 25Y y; 26Y *yp = &z; 27X *xp = &z; 28Z *zp = &z; 29 30class A { 31 public: 32 int Ai; 33}; 34 35class B { 36 public: 37 int Bi; 38}; 39 40class D : public A, public B { 41 int Di; 42}; 43 44/* 45class E : public D, public B { 46 int Ei; 47}; 48*/ 49class E { 50 int Ei; 51}; 52 53class F : public E, public D { 54 int Fi; 55}; 56 57D d; 58A *ap = &d; 59B *bp = &d; 60F f; 61A *aap = &f; 62D *dp = &f; 63B *bbp = dp; 64 65void *vp = zp; 66 67void error (int i) 68{ 69 exit(i); 70} 71 72int main () 73{ 74 if (typeid(z) != typeid(Z)) error(1); 75 if (typeid(*yp) == typeid(Z)) error(2); 76 if (typeid(*yp) == typeid(*zp)) error(3); 77 if (typeid(xp) == typeid(yp)) error(4); 78 79 xp = (X *)&y; 80 if (typeid(*xp) == typeid(*yp)) error(5); 81 if (typeid(*xp) == typeid(Y)) error(6); 82 83 if (typeid(*ap) == typeid(*bp)) error (31); 84 if (typeid(*ap) == typeid(D)) error(32); 85 86 if (typeid(*aap) == typeid(*bbp)) error(33); 87 if (typeid(*dp) == typeid(*aap)) error(34); 88} 89