| //===----------------------------------------------------------------------===// | 
 | // | 
 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
 | // See https://llvm.org/LICENSE.txt for license information. | 
 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #include <cassert> | 
 | #include "support/timer.h" | 
 |  | 
 | // This test explicitly tests dynamic cast with types that have inaccessible | 
 | // bases. | 
 | #if defined(__clang__) | 
 | #   pragma clang diagnostic ignored "-Winaccessible-base" | 
 | #elif defined(__GNUC__) | 
 | #   pragma GCC diagnostic ignored "-Winaccessible-base" | 
 | #endif | 
 |  | 
 | namespace t1 | 
 | { | 
 |  | 
 | struct A1 | 
 | { | 
 |     char _[43981]; | 
 |     virtual ~A1() {} | 
 |  | 
 |     A1* getA1() {return this;} | 
 | }; | 
 |  | 
 | struct A2 | 
 | { | 
 |     char _[34981]; | 
 |     virtual ~A2() {} | 
 |  | 
 |     A2* getA2() {return this;} | 
 | }; | 
 |  | 
 | struct A3 | 
 |     : public virtual A1, | 
 |       private A2 | 
 | { | 
 |     char _[93481]; | 
 |     virtual ~A3() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A3* getA3() {return this;} | 
 | }; | 
 |  | 
 | struct A4 | 
 |     : public A3, | 
 |       public A2 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A4() {} | 
 |  | 
 |     t1::A1* getA1() {return A3::getA1();} | 
 |     A2* getA2() {return A3::getA2();} | 
 |     A3* getA3() {return A3::getA3();} | 
 |     A4* getA4() {return this;} | 
 | }; | 
 |  | 
 | struct A5 | 
 |     : public A4, | 
 |       public A3 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A5() {} | 
 |  | 
 |     t1::A1* getA1() {return A4::getA1();} | 
 |     A2* getA2() {return A4::getA2();} | 
 |     A3* getA3() {return A4::getA3();} | 
 |     A4* getA4() {return A4::getA4();} | 
 |     A5* getA5() {return this;} | 
 | }; | 
 |  | 
 | void test() | 
 | { | 
 |     A1 a1; | 
 |     A2 a2; | 
 |     A3 a3; | 
 |     A4 a4; | 
 |     A5 a5; | 
 |  | 
 |     assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1()); | 
 |     assert(dynamic_cast<A1*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a4.getA3()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA1()) == a5.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA5()) == a5.getA1()); | 
 |  | 
 |     assert(dynamic_cast<A2*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2()); | 
 | //    assert(dynamic_cast<A2*>(a3.getA3()) == 0);  // cast to private base | 
 |     assert(dynamic_cast<A2*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2()); | 
 | //    assert(dynamic_cast<A2*>(a4.getA3()) == 0);  // cast to private base | 
 | //    assert(dynamic_cast<A2*>(a4.getA4()) == 0);  // cast to ambiguous base | 
 |     assert(dynamic_cast<A2*>(a5.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2()); | 
 | //    assert(dynamic_cast<A2*>(a5.getA3()) == 0);  // cast to private base | 
 | //    assert(dynamic_cast<A2*>(a5.getA4()) == 0);  // cast to ambiguous base | 
 | //    assert(dynamic_cast<A2*>(a5.getA5()) == 0);  // cast to ambiguous base | 
 |  | 
 |     assert(dynamic_cast<A3*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA1()) == a4.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA3()) == a4.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA4()) == a4.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3()); | 
 | //    assert(dynamic_cast<A3*>(a5.getA5()) == 0);  // cast to ambiguous base | 
 |  | 
 |     assert(dynamic_cast<A4*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA3()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA1()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4()); | 
 |  | 
 |     assert(dynamic_cast<A5*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA1()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5()); | 
 | } | 
 |  | 
 | }  // t1 | 
 |  | 
 | namespace t2 | 
 | { | 
 |  | 
 | struct A1 | 
 | { | 
 |     char _[43981]; | 
 |     virtual ~A1() {} | 
 |  | 
 |     A1* getA1() {return this;} | 
 | }; | 
 |  | 
 | struct A2 | 
 | { | 
 |     char _[34981]; | 
 |     virtual ~A2() {} | 
 |  | 
 |     A2* getA2() {return this;} | 
 | }; | 
 |  | 
 | struct A3 | 
 |     : public virtual A1, | 
 |       public A2 | 
 | { | 
 |     char _[93481]; | 
 |     virtual ~A3() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A3* getA3() {return this;} | 
 | }; | 
 |  | 
 | struct A4 | 
 |     : public A3, | 
 |       public A2 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A4() {} | 
 |  | 
 |     t2::A1* getA1() {return A3::getA1();} | 
 |     A2* getA2() {return A3::getA2();} | 
 |     A3* getA3() {return A3::getA3();} | 
 |     A4* getA4() {return this;} | 
 | }; | 
 |  | 
 | struct A5 | 
 |     : public A4, | 
 |       public A3 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A5() {} | 
 |  | 
 |     t2::A1* getA1() {return A4::getA1();} | 
 |     A2* getA2() {return A4::getA2();} | 
 |     A3* getA3() {return A4::getA3();} | 
 |     A4* getA4() {return A4::getA4();} | 
 |     A5* getA5() {return this;} | 
 | }; | 
 |  | 
 | void test() | 
 | { | 
 |     A1 a1; | 
 |     A2 a2; | 
 |     A3 a3; | 
 |     A4 a4; | 
 |     A5 a5; | 
 |  | 
 |     assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1()); | 
 |     assert(dynamic_cast<A1*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA3()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA1()) == a5.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA2()) == a5.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA5()) == a5.getA1()); | 
 |  | 
 |     assert(dynamic_cast<A2*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA3()) == a4.getA2()); | 
 | //    assert(dynamic_cast<A2*>(a4.getA4()) == 0);  // cast to ambiguous base | 
 |     assert(dynamic_cast<A2*>(a5.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2()); | 
 | //    assert(dynamic_cast<A2*>(a5.getA4()) == 0);  // cast to ambiguous base | 
 | //    assert(dynamic_cast<A2*>(a5.getA5()) == 0);  // cast to ambiguous base | 
 |  | 
 |     assert(dynamic_cast<A3*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA1()) == a4.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA2()) == a4.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA3()) == a4.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA4()) == a4.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3()); | 
 | //    assert(dynamic_cast<A3*>(a5.getA5()) == 0);  // cast to ambiguous base | 
 |  | 
 |     assert(dynamic_cast<A4*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA3()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA1()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4()); | 
 |  | 
 |     assert(dynamic_cast<A5*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA1()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5()); | 
 | } | 
 |  | 
 | }  // t2 | 
 |  | 
 | namespace t3 | 
 | { | 
 |  | 
 | struct A1 | 
 | { | 
 |     char _[43981]; | 
 |     virtual ~A1() {} | 
 |  | 
 |     A1* getA1() {return this;} | 
 | }; | 
 |  | 
 | struct A2 | 
 | { | 
 |     char _[34981]; | 
 |     virtual ~A2() {} | 
 |  | 
 |     A2* getA2() {return this;} | 
 | }; | 
 |  | 
 | struct A3 | 
 |     : public A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[93481]; | 
 |     virtual ~A3() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A3* getA3() {return this;} | 
 | }; | 
 |  | 
 | struct A4 | 
 |     : public A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A4() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A4* getA4() {return this;} | 
 | }; | 
 |  | 
 | struct A5 | 
 |     : public A3, | 
 |       public A4 | 
 | { | 
 |     char _[41389]; | 
 |     virtual ~A5() {} | 
 |  | 
 |     A1* getA14() {return A4::getA1();} | 
 |     A1* getA13() {return A3::getA1();} | 
 |     A2* getA2() {return A4::getA2();} | 
 |     A3* getA3() {return A3::getA3();} | 
 |     A4* getA4() {return A4::getA4();} | 
 |     A5* getA5() {return this;} | 
 | }; | 
 |  | 
 | void test() | 
 | { | 
 |     A1 a1; | 
 |     A2 a2; | 
 |     A3 a3; | 
 |     A4 a4; | 
 |     A5 a5; | 
 |  | 
 |     assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1()); | 
 |     assert(dynamic_cast<A1*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14()); | 
 |     assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14()); | 
 |  | 
 |     assert(dynamic_cast<A2*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2()); | 
 |  | 
 |     assert(dynamic_cast<A3*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3()); | 
 |  | 
 |     assert(dynamic_cast<A4*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4()); | 
 |  | 
 |     assert(dynamic_cast<A5*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5()); | 
 | } | 
 |  | 
 | }  // t3 | 
 |  | 
 | namespace t4 | 
 | { | 
 |  | 
 | struct A1 | 
 | { | 
 |     char _[43981]; | 
 |     virtual ~A1() {} | 
 |  | 
 |     A1* getA1() {return this;} | 
 | }; | 
 |  | 
 | struct A2 | 
 | { | 
 |     char _[34981]; | 
 |     virtual ~A2() {} | 
 |  | 
 |     A2* getA2() {return this;} | 
 | }; | 
 |  | 
 | struct A3 | 
 |     : protected A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[93481]; | 
 |     virtual ~A3() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A3* getA3() {return this;} | 
 | }; | 
 |  | 
 | struct A4 | 
 |     : public A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A4() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A4* getA4() {return this;} | 
 | }; | 
 |  | 
 | struct A5 | 
 |     : public A3, | 
 |       public A4 | 
 | { | 
 |     char _[41389]; | 
 |     virtual ~A5() {} | 
 |  | 
 |     A1* getA14() {return A4::getA1();} | 
 |     A1* getA13() {return A3::getA1();} | 
 |     A2* getA2() {return A4::getA2();} | 
 |     A3* getA3() {return A3::getA3();} | 
 |     A4* getA4() {return A4::getA4();} | 
 |     A5* getA5() {return this;} | 
 | }; | 
 |  | 
 | void test() | 
 | { | 
 |     A1 a1; | 
 |     A2 a2; | 
 |     A3 a3; | 
 |     A4 a4; | 
 |     A5 a5; | 
 |  | 
 |     assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1()); | 
 |     assert(dynamic_cast<A1*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA2()) == 0); | 
 | //    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());  // cast to protected base | 
 |     assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14()); | 
 |     assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA2()) == 0); | 
 | //    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());  // cast to protected base | 
 |     assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14()); | 
 |  | 
 |     assert(dynamic_cast<A2*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA13()) == 0); | 
 |     assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2()); | 
 |  | 
 |     assert(dynamic_cast<A3*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA13()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3()); | 
 |  | 
 |     assert(dynamic_cast<A4*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA13()) == 0); | 
 |     assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4()); | 
 |  | 
 |     assert(dynamic_cast<A5*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA13()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5()); | 
 | } | 
 |  | 
 | }  // t4 | 
 |  | 
 | namespace t5 | 
 | { | 
 |  | 
 | struct A1 | 
 | { | 
 |     char _[43981]; | 
 |     virtual ~A1() {} | 
 |  | 
 |     A1* getA1() {return this;} | 
 | }; | 
 |  | 
 | struct A2 | 
 | { | 
 |     char _[34981]; | 
 |     virtual ~A2() {} | 
 |  | 
 |     A2* getA2() {return this;} | 
 | }; | 
 |  | 
 | struct A3 | 
 |     : public A1, | 
 |       protected virtual A2 | 
 | { | 
 |     char _[93481]; | 
 |     virtual ~A3() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A3* getA3() {return this;} | 
 | }; | 
 |  | 
 | struct A4 | 
 |     : public A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A4() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A4* getA4() {return this;} | 
 | }; | 
 |  | 
 | struct A5 | 
 |     : public A3, | 
 |       public A4 | 
 | { | 
 |     char _[41389]; | 
 |     virtual ~A5() {} | 
 |  | 
 |     A1* getA14() {return A4::getA1();} | 
 |     A1* getA13() {return A3::getA1();} | 
 |     A2* getA2() {return A4::getA2();} | 
 |     A3* getA3() {return A3::getA3();} | 
 |     A4* getA4() {return A4::getA4();} | 
 |     A5* getA5() {return this;} | 
 | }; | 
 |  | 
 | void test() | 
 | { | 
 |     A1 a1; | 
 |     A2 a2; | 
 |     A3 a3; | 
 |     A4 a4; | 
 |     A5 a5; | 
 |  | 
 |     assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1()); | 
 |     assert(dynamic_cast<A1*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14()); | 
 |     assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14()); | 
 |  | 
 |     assert(dynamic_cast<A2*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2()); | 
 | //    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());  // cast to protected base | 
 |     assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2()); | 
 | //    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());  // cast to protected base | 
 |     assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2()); | 
 |  | 
 |     assert(dynamic_cast<A3*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3()); | 
 |  | 
 |     assert(dynamic_cast<A4*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4()); | 
 |  | 
 |     assert(dynamic_cast<A5*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5()); | 
 | } | 
 |  | 
 | }  // t5 | 
 |  | 
 | namespace t6 | 
 | { | 
 |  | 
 | struct A1 | 
 | { | 
 |     char _[43981]; | 
 |     virtual ~A1() {} | 
 |  | 
 |     A1* getA1() {return this;} | 
 | }; | 
 |  | 
 | struct A2 | 
 | { | 
 |     char _[34981]; | 
 |     virtual ~A2() {} | 
 |  | 
 |     A2* getA2() {return this;} | 
 | }; | 
 |  | 
 | struct A3 | 
 |     : public A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[93481]; | 
 |     virtual ~A3() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A3* getA3() {return this;} | 
 | }; | 
 |  | 
 | struct A4 | 
 |     : protected A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A4() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A4* getA4() {return this;} | 
 | }; | 
 |  | 
 | struct A5 | 
 |     : public A3, | 
 |       public A4 | 
 | { | 
 |     char _[41389]; | 
 |     virtual ~A5() {} | 
 |  | 
 |     A1* getA14() {return A4::getA1();} | 
 |     A1* getA13() {return A3::getA1();} | 
 |     A2* getA2() {return A4::getA2();} | 
 |     A3* getA3() {return A3::getA3();} | 
 |     A4* getA4() {return A4::getA4();} | 
 |     A5* getA5() {return this;} | 
 | }; | 
 |  | 
 | void test() | 
 | { | 
 |     A1 a1; | 
 |     A2 a2; | 
 |     A3 a3; | 
 |     A4 a4; | 
 |     A5 a5; | 
 |  | 
 |     assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1()); | 
 |     assert(dynamic_cast<A1*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA2()) == 0); | 
 | //    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());  // cast to protected base | 
 |     assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14()); | 
 |     assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13()); | 
 | //    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());  // cast to protected base | 
 |  | 
 |     assert(dynamic_cast<A2*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA14()) == 0); | 
 |     assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2()); | 
 |  | 
 |     assert(dynamic_cast<A3*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA14()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3()); | 
 |  | 
 |     assert(dynamic_cast<A4*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA14()) == 0); | 
 |     assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4()); | 
 |  | 
 |     assert(dynamic_cast<A5*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA14()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5()); | 
 | } | 
 |  | 
 | }  // t6 | 
 |  | 
 | namespace t7 | 
 | { | 
 |  | 
 | struct A1 | 
 | { | 
 |     char _[43981]; | 
 |     virtual ~A1() {} | 
 |  | 
 |     A1* getA1() {return this;} | 
 | }; | 
 |  | 
 | struct A2 | 
 | { | 
 |     char _[34981]; | 
 |     virtual ~A2() {} | 
 |  | 
 |     A2* getA2() {return this;} | 
 | }; | 
 |  | 
 | struct A3 | 
 |     : public A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[93481]; | 
 |     virtual ~A3() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A3* getA3() {return this;} | 
 | }; | 
 |  | 
 | struct A4 | 
 |     : public A1, | 
 |       protected virtual A2 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A4() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A4* getA4() {return this;} | 
 | }; | 
 |  | 
 | struct A5 | 
 |     : public A3, | 
 |       public A4 | 
 | { | 
 |     char _[41389]; | 
 |     virtual ~A5() {} | 
 |  | 
 |     A1* getA14() {return A4::getA1();} | 
 |     A1* getA13() {return A3::getA1();} | 
 |     A2* getA2() {return A4::getA2();} | 
 |     A3* getA3() {return A3::getA3();} | 
 |     A4* getA4() {return A4::getA4();} | 
 |     A5* getA5() {return this;} | 
 | }; | 
 |  | 
 | void test() | 
 | { | 
 |     A1 a1; | 
 |     A2 a2; | 
 |     A3 a3; | 
 |     A4 a4; | 
 |     A5 a5; | 
 |  | 
 |     assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1()); | 
 |     assert(dynamic_cast<A1*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14()); | 
 |     assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14()); | 
 |  | 
 |     assert(dynamic_cast<A2*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2()); | 
 | //    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());  // cast to protected base | 
 |     assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2()); | 
 | //    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());  // cast to protected base | 
 |     assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2()); | 
 |  | 
 |     assert(dynamic_cast<A3*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3()); | 
 |  | 
 |     assert(dynamic_cast<A4*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4()); | 
 |  | 
 |     assert(dynamic_cast<A5*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5()); | 
 | } | 
 |  | 
 | }  // t7 | 
 |  | 
 | namespace t8 | 
 | { | 
 |  | 
 | struct A1 | 
 | { | 
 |     char _[43981]; | 
 |     virtual ~A1() {} | 
 |  | 
 |     A1* getA1() {return this;} | 
 | }; | 
 |  | 
 | struct A2 | 
 | { | 
 |     char _[34981]; | 
 |     virtual ~A2() {} | 
 |  | 
 |     A2* getA2() {return this;} | 
 | }; | 
 |  | 
 | struct A3 | 
 |     : public A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[93481]; | 
 |     virtual ~A3() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A3* getA3() {return this;} | 
 | }; | 
 |  | 
 | struct A4 | 
 |     : public A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A4() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A4* getA4() {return this;} | 
 | }; | 
 |  | 
 | struct A5 | 
 |     : protected A3, | 
 |       public A4 | 
 | { | 
 |     char _[41389]; | 
 |     virtual ~A5() {} | 
 |  | 
 |     A1* getA14() {return A4::getA1();} | 
 |     A1* getA13() {return A3::getA1();} | 
 |     A2* getA2() {return A4::getA2();} | 
 |     A3* getA3() {return A3::getA3();} | 
 |     A4* getA4() {return A4::getA4();} | 
 |     A5* getA5() {return this;} | 
 | }; | 
 |  | 
 | void test() | 
 | { | 
 |     A1 a1; | 
 |     A2 a2; | 
 |     A3 a3; | 
 |     A4 a4; | 
 |     A5 a5; | 
 |  | 
 |     assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1()); | 
 |     assert(dynamic_cast<A1*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14()); | 
 |     assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14()); | 
 |  | 
 |     assert(dynamic_cast<A2*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA13()) == 0); | 
 |     assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2()); | 
 |  | 
 |     assert(dynamic_cast<A3*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA14()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA4()) == 0); | 
 | //    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());  // cast to protected base | 
 |  | 
 |     assert(dynamic_cast<A4*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA13()) == 0); | 
 |     assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4()); | 
 |  | 
 |     assert(dynamic_cast<A5*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA13()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5()); | 
 | } | 
 |  | 
 | }  // t8 | 
 |  | 
 | namespace t9 | 
 | { | 
 |  | 
 | struct A1 | 
 | { | 
 |     char _[43981]; | 
 |     virtual ~A1() {} | 
 |  | 
 |     A1* getA1() {return this;} | 
 | }; | 
 |  | 
 | struct A2 | 
 | { | 
 |     char _[34981]; | 
 |     virtual ~A2() {} | 
 |  | 
 |     A2* getA2() {return this;} | 
 | }; | 
 |  | 
 | struct A3 | 
 |     : public A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[93481]; | 
 |     virtual ~A3() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A3* getA3() {return this;} | 
 | }; | 
 |  | 
 | struct A4 | 
 |     : public A1, | 
 |       public virtual A2 | 
 | { | 
 |     char _[13489]; | 
 |     virtual ~A4() {} | 
 |  | 
 |     A1* getA1() {return A1::getA1();} | 
 |     A2* getA2() {return A2::getA2();} | 
 |     A4* getA4() {return this;} | 
 | }; | 
 |  | 
 | struct A5 | 
 |     : public A3, | 
 |       protected A4 | 
 | { | 
 |     char _[41389]; | 
 |     virtual ~A5() {} | 
 |  | 
 |     A1* getA14() {return A4::getA1();} | 
 |     A1* getA13() {return A3::getA1();} | 
 |     A2* getA2() {return A4::getA2();} | 
 |     A3* getA3() {return A3::getA3();} | 
 |     A4* getA4() {return A4::getA4();} | 
 |     A5* getA5() {return this;} | 
 | }; | 
 |  | 
 | void test() | 
 | { | 
 |     A1 a1; | 
 |     A2 a2; | 
 |     A3 a3; | 
 |     A4 a4; | 
 |     A5 a5; | 
 |  | 
 |     assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1()); | 
 |     assert(dynamic_cast<A1*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1()); | 
 |     assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14()); | 
 |     assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA2()) == 0); | 
 |     assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13()); | 
 |     assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14()); | 
 |  | 
 |     assert(dynamic_cast<A2*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA14()) == 0); | 
 |     assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2()); | 
 |     assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2()); | 
 |  | 
 |     assert(dynamic_cast<A3*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3()); | 
 |     assert(dynamic_cast<A3*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A3*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA14()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3()); | 
 |     assert(dynamic_cast<A3*>(a5.getA4()) == 0); | 
 |     assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3()); | 
 |  | 
 |     assert(dynamic_cast<A4*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A4*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA13()) == 0); | 
 |     assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4()); | 
 |     assert(dynamic_cast<A4*>(a5.getA3()) == 0); | 
 |     assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4()); | 
 | //    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());  // cast to protected base | 
 |  | 
 |     assert(dynamic_cast<A5*>(a1.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a2.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a3.getA3()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA1()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA2()) == 0); | 
 |     assert(dynamic_cast<A5*>(a4.getA4()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA14()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5()); | 
 |     assert(dynamic_cast<A5*>(a5.getA4()) == 0); | 
 |     assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5()); | 
 | } | 
 |  | 
 | }  // t9 | 
 |  | 
 |  | 
 | int main(int, char**) | 
 | { | 
 |     timer t; | 
 |     t1::test(); | 
 |     t2::test(); | 
 |     t3::test(); | 
 |     t4::test(); | 
 |     t5::test(); | 
 |     t6::test(); | 
 |     t7::test(); | 
 |     t8::test(); | 
 |     t9::test(); | 
 |  | 
 |     return 0; | 
 | } |