4 extern "C" int printf (const char *, ...);
5 extern "C" void exit(int);
11 A() { printf ("A is constructed.\n"); }
12 virtual void xx(int doit) { printf ("A is destructed.\n"); }
17 A1() { printf ("A1 is constructed.\n"); }
18 virtual void xx(int doit) { printf ("A1 is destructed.\n"); }
21 class B : public virtual A, public A1 {
23 B() { printf ("B is constructed.\n"); }
24 virtual void xx(int doit) {
25 printf ("B is destructed.\n");
33 class C : public virtual A {
35 C() { printf ("C is constructed.\n");
37 virtual void xx(int doit) {
38 printf ("C is destructed.\n");
43 class D : public C, public B {
45 D() { ++num; printf ("D is constructed.\n");
48 virtual void xx(int doit) {
51 printf("FAIL\n%x != %x\n", ptr, this);
54 printf ("D is destructed.\n");
61 printf ("Casting to A!\n");
65 printf ("Casting to A1!\n");
70 printf ("Casting to B!\n");
75 printf ("Casting to C!\n");
79 int main(int argc, char *argv[]) {
80 printf ("*** Construct D object!\n");
83 printf ("*** Try to delete the casting pointer!\n");