2003-12-26 Guilhem Lavaux <guilhem@kaffe.org>
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.jason / dcast3.C
bloba6179187f7f609a22ff131ab9dbfada46146476b
1 // { dg-do run  }
2 // Testcase for tricky dynamic cast situations.
4 struct A {
5   virtual void f () { }
6 };
8 struct B : public A { };
9 struct C : public B { };
10 struct D : public B { };
11 struct E : public C, public D { };
13 struct B2 : public virtual A { };
14 struct C2 : public B2 { };
15 struct D2 : public B2 { };
16 struct E2 : public C2, public D2 { };
18 int main ()
20   E e;
21   E2 e2;
23   A* ap = (C*)&e;
25   // ap points to base subobject of unique B; succeeds
26   if (dynamic_cast <B*> (ap) == 0)
27     return 1;
29   ap = (C2*)&e2;
30   // ap points to base subobject shared by two Bs; fails
31   if (dynamic_cast <B2*> (ap) != 0)
32     return 2;