summaryrefslogtreecommitdiff
path: root/trunk/test/dynamic_cast14.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/test/dynamic_cast14.cpp')
-rw-r--r--trunk/test/dynamic_cast14.cpp2189
1 files changed, 2189 insertions, 0 deletions
diff --git a/trunk/test/dynamic_cast14.cpp b/trunk/test/dynamic_cast14.cpp
new file mode 100644
index 0000000..2145fb4
--- /dev/null
+++ b/trunk/test/dynamic_cast14.cpp
@@ -0,0 +1,2189 @@
+//===------------------------- dynamic_cast14.cpp -------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <cassert>
+
+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 A1,
+ public virtual A2
+{
+ char _[93481];
+ virtual ~A3() {}
+
+ A1* getA1_3() {return A1::getA1();}
+ A2* getA2() {return A2::getA2();}
+ A3* getA3() {return this;}
+};
+
+struct A4
+ : public virtual A2,
+ public A1
+{
+ char _[13489];
+ virtual ~A4() {}
+
+ A1* getA1_4() {return A1::getA1();}
+ A2* getA2() {return A2::getA2();}
+ A4* getA4() {return this;}
+};
+
+struct A5
+ : public A3,
+ public A4
+{
+ char _[13489];
+ virtual ~A5() {}
+
+ A1* getA1_3() {return A3::getA1();}
+ A1* getA1_4() {return A4::getA1();}
+ A2* getA2() {return A3::getA2();}
+ A3* getA3() {return A3::getA3();}
+ A4* getA4() {return A4::getA4();}
+ A5* getA5() {return this;}
+};
+
+struct A6
+ : public A1
+{
+ char _[81349];
+ virtual ~A6() {}
+
+ A1* getA1_6() {return A1::getA1();}
+ A6* getA6() {return this;}
+};
+
+struct A7
+ : public A5,
+ public A6
+{
+ char _[34819];
+ virtual ~A7() {}
+
+ A1* getA1_3() {return A5::getA1_3();}
+ A1* getA1_4() {return A5::getA1_4();}
+ A1* getA1_6() {return A6::getA1_6();}
+ A2* getA2() {return A5::getA2();}
+ A3* getA3() {return A5::getA3();}
+ A4* getA4() {return A5::getA4();}
+ A5* getA5() {return A5::getA5();}
+ A6* getA6() {return A6::getA6();}
+ A7* getA7() {return this;}
+};
+
+struct A8
+ : public A7
+{
+ char _[3489];
+ virtual ~A8() {}
+
+ A1* getA1_3() {return A7::getA1_3();}
+ A1* getA1_4() {return A7::getA1_4();}
+ A1* getA1_6() {return A7::getA1_6();}
+ A2* getA2() {return A7::getA2();}
+ A3* getA3() {return A7::getA3();}
+ A4* getA4() {return A7::getA4();}
+ A5* getA5() {return A7::getA5();}
+ A6* getA6() {return A7::getA6();}
+ A7* getA7() {return A7::getA7();}
+ A8* getA8() {return this;}
+};
+
+struct A9
+ : public A1
+{
+ char _[3481];
+ virtual ~A9() {}
+
+ A1* getA1_9() {return A1::getA1();}
+ A9* getA9() {return this;}
+};
+
+struct A10
+ : public virtual A8
+{
+ char _[4831];
+ virtual ~A10() {}
+
+ A1* getA1_3() {return A8::getA1_3();}
+ A1* getA1_4() {return A8::getA1_4();}
+ A1* getA1_6() {return A8::getA1_6();}
+ A2* getA2() {return A8::getA2();}
+ A3* getA3() {return A8::getA3();}
+ A4* getA4() {return A8::getA4();}
+ A5* getA5() {return A8::getA5();}
+ A6* getA6() {return A8::getA6();}
+ A7* getA7() {return A8::getA7();}
+ A8* getA8() {return A8::getA8();}
+ A10* getA10() {return this;}
+};
+
+struct A11
+ : public virtual A8,
+ public A9
+{
+ char _[6483];
+ virtual ~A11() {}
+
+ A1* getA1_3() {return A8::getA1_3();}
+ A1* getA1_4() {return A8::getA1_4();}
+ A1* getA1_6() {return A8::getA1_6();}
+ A1* getA1_9() {return A9::getA1_9();}
+ A2* getA2() {return A8::getA2();}
+ A3* getA3() {return A8::getA3();}
+ A4* getA4() {return A8::getA4();}
+ A5* getA5() {return A8::getA5();}
+ A6* getA6() {return A8::getA6();}
+ A7* getA7() {return A8::getA7();}
+ A8* getA8() {return A8::getA8();}
+ A9* getA9() {return A9::getA9();}
+ A11* getA11() {return this;}
+};
+
+struct A12
+ : public A10,
+ public A11
+{
+ char _[2283];
+ virtual ~A12() {}
+
+ A1* getA1_3() {return A10::getA1_3();}
+ A1* getA1_4() {return A10::getA1_4();}
+ A1* getA1_6() {return A10::getA1_6();}
+ A1* getA1_9() {return A11::getA1_9();}
+ A2* getA2() {return A10::getA2();}
+ A3* getA3() {return A10::getA3();}
+ A4* getA4() {return A10::getA4();}
+ A5* getA5() {return A10::getA5();}
+ A6* getA6() {return A10::getA6();}
+ A7* getA7() {return A10::getA7();}
+ A8* getA8() {return A10::getA8();}
+ A9* getA9() {return A11::getA9();}
+ A10* getA10() {return A10::getA10();}
+ A11* getA11() {return A11::getA11();}
+ A12* getA12() {return this;}
+};
+
+struct A13
+ : public A12
+{
+ char _[1283];
+ virtual ~A13() {}
+
+ A1* getA1_3() {return A12::getA1_3();}
+ A1* getA1_4() {return A12::getA1_4();}
+ A1* getA1_6() {return A12::getA1_6();}
+ A1* getA1_9() {return A12::getA1_9();}
+ A2* getA2() {return A12::getA2();}
+ A3* getA3() {return A12::getA3();}
+ A4* getA4() {return A12::getA4();}
+ A5* getA5() {return A12::getA5();}
+ A6* getA6() {return A12::getA6();}
+ A7* getA7() {return A12::getA7();}
+ A8* getA8() {return A12::getA8();}
+ A9* getA9() {return A12::getA9();}
+ A10* getA10() {return A12::getA10();}
+ A11* getA11() {return A12::getA11();}
+ A12* getA12() {return A12::getA12();}
+ A13* getA13() {return this;}
+};
+
+void test()
+{
+ A3 a3;
+ A4 a4;
+ A5 a5;
+ A6 a6;
+ A7 a7;
+ A8 a8;
+ A9 a9;
+ A10 a10;
+ A11 a11;
+ A12 a12;
+ A13 a13;
+
+ assert(dynamic_cast<A3*>(a3.getA1_3()) == a3.getA3());
+ assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
+
+ assert(dynamic_cast<A3*>(a4.getA1_4()) == 0);
+ assert(dynamic_cast<A3*>(a4.getA2()) == 0);
+ assert(dynamic_cast<A4*>(a4.getA1_4()) == a4.getA4());
+ assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
+
+ assert(dynamic_cast<A3*>(a5.getA1_3()) == a5.getA3());
+ assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
+
+ assert(dynamic_cast<A4*>(a5.getA1_3()) == a5.getA4());
+ assert(dynamic_cast<A4*>(a5.getA1_4()) == a5.getA4());
+ assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
+ assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
+
+ assert(dynamic_cast<A5*>(a5.getA1_3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA1_4()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
+
+ assert(dynamic_cast<A3*>(a6.getA1_6()) == 0);
+
+ assert(dynamic_cast<A4*>(a6.getA1_6()) == 0);
+
+ assert(dynamic_cast<A5*>(a6.getA1_6()) == 0);
+
+ assert(dynamic_cast<A6*>(a6.getA1_6()) == a6.getA6());
+
+ assert(dynamic_cast<A3*>(a7.getA1_3()) == a7.getA3());
+ assert(dynamic_cast<A3*>(a7.getA1_4()) == a7.getA3());
+ assert(dynamic_cast<A3*>(a7.getA2()) == a7.getA3());
+
+ assert(dynamic_cast<A4*>(a7.getA1_3()) == a7.getA4());
+ assert(dynamic_cast<A4*>(a7.getA1_4()) == a7.getA4());
+ assert(dynamic_cast<A4*>(a7.getA2()) == a7.getA4());
+ assert(dynamic_cast<A4*>(a7.getA3()) == a7.getA4());
+
+ assert(dynamic_cast<A5*>(a7.getA1_3()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA1_4()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA2()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA3()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA4()) == a7.getA5());
+
+ assert(dynamic_cast<A6*>(a7.getA1_3()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA1_4()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA1_6()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA2()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA3()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA4()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA5()) == a7.getA6());
+
+ assert(dynamic_cast<A7*>(a7.getA1_3()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA1_4()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA1_6()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA2()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA3()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA4()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA5()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA6()) == a7.getA7());
+
+ assert(dynamic_cast<A3*>(a8.getA1_3()) == a8.getA3());
+ assert(dynamic_cast<A3*>(a8.getA1_4()) == a8.getA3());
+ assert(dynamic_cast<A3*>(a8.getA2()) == a8.getA3());
+
+ assert(dynamic_cast<A4*>(a8.getA1_3()) == a8.getA4());
+ assert(dynamic_cast<A4*>(a8.getA1_4()) == a8.getA4());
+ assert(dynamic_cast<A4*>(a8.getA2()) == a8.getA4());
+ assert(dynamic_cast<A4*>(a8.getA3()) == a8.getA4());
+
+ assert(dynamic_cast<A5*>(a8.getA1_3()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA1_4()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA2()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA3()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA4()) == a8.getA5());
+
+ assert(dynamic_cast<A6*>(a8.getA1_3()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA1_4()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA1_6()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA2()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA3()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA4()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA5()) == a8.getA6());
+
+ assert(dynamic_cast<A7*>(a8.getA1_3()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA1_4()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA1_6()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA2()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA3()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA4()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA5()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA6()) == a8.getA7());
+
+ assert(dynamic_cast<A8*>(a8.getA1_3()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA1_4()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA1_6()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA2()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA3()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA4()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA5()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA6()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA7()) == a8.getA8());
+
+ assert(dynamic_cast<A3*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A4*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A5*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A6*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A7*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A8*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A9*>(a9.getA1_9()) == a9.getA9());
+
+ assert(dynamic_cast<A3*>(a10.getA1_3()) == a10.getA3());
+ assert(dynamic_cast<A3*>(a10.getA1_4()) == a10.getA3());
+ assert(dynamic_cast<A3*>(a10.getA1_6()) == a10.getA3());
+ assert(dynamic_cast<A3*>(a10.getA2()) == a10.getA3());
+
+ assert(dynamic_cast<A4*>(a10.getA1_3()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA1_4()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA1_6()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA2()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA3()) == a10.getA4());
+
+ assert(dynamic_cast<A5*>(a10.getA1_3()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA1_4()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA1_6()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA2()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA3()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA4()) == a10.getA5());
+
+ assert(dynamic_cast<A6*>(a10.getA1_3()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA1_4()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA1_6()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA2()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA3()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA4()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA5()) == a10.getA6());
+
+ assert(dynamic_cast<A7*>(a10.getA1_3()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA1_4()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA1_6()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA2()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA3()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA4()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA5()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA6()) == a10.getA7());
+
+ assert(dynamic_cast<A8*>(a10.getA1_3()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA1_4()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA1_6()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA2()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA3()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA4()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA5()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA6()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA7()) == a10.getA8());
+
+ assert(dynamic_cast<A9*>(a10.getA1_3()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA1_4()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA1_6()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA2()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA3()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA4()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA5()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA6()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA7()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA8()) == 0);
+
+ assert(dynamic_cast<A10*>(a10.getA1_3()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA1_4()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA1_6()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA2()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA3()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA4()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA5()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA6()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA7()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA8()) == a10.getA10());
+
+ assert(dynamic_cast<A3*>(a11.getA1_3()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA1_4()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA1_6()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA1_9()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA2()) == a11.getA3());
+
+ assert(dynamic_cast<A4*>(a11.getA1_3()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA1_4()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA1_6()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA1_9()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA2()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA3()) == a11.getA4());
+
+ assert(dynamic_cast<A5*>(a11.getA1_3()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA1_4()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA1_6()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA1_9()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA2()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA3()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA4()) == a11.getA5());
+
+ assert(dynamic_cast<A6*>(a11.getA1_3()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA1_4()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA1_6()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA1_9()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA2()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA3()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA4()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA5()) == a11.getA6());
+
+ assert(dynamic_cast<A7*>(a11.getA1_3()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA1_4()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA1_6()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA1_9()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA2()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA3()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA4()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA5()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA6()) == a11.getA7());
+
+ assert(dynamic_cast<A8*>(a11.getA1_3()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA1_4()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA1_6()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA1_9()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA2()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA3()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA4()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA5()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA6()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA7()) == a11.getA8());
+
+ assert(dynamic_cast<A9*>(a11.getA1_3()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA1_4()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA1_6()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA1_9()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA2()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA3()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA4()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA5()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA6()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA7()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA8()) == a11.getA9());
+
+ assert(dynamic_cast<A10*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA1_4()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA1_6()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA1_9()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA2()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA3()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA4()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA5()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA6()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA7()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA8()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA9()) == 0);
+
+ assert(dynamic_cast<A11*>(a11.getA1_3()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA1_4()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA1_6()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA1_9()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA2()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA3()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA4()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA5()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA6()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA7()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA8()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA9()) == a11.getA11());
+
+ assert(dynamic_cast<A3*>(a12.getA1_3()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA1_4()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA1_6()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA1_9()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA2()) == a12.getA3());
+
+ assert(dynamic_cast<A4*>(a12.getA1_3()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA1_4()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA1_6()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA1_9()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA2()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA3()) == a12.getA4());
+
+ assert(dynamic_cast<A5*>(a12.getA1_3()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA1_4()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA1_6()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA1_9()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA2()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA3()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA4()) == a12.getA5());
+
+ assert(dynamic_cast<A6*>(a12.getA1_3()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA1_4()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA1_6()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA1_9()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA2()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA3()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA4()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA5()) == a12.getA6());
+
+ assert(dynamic_cast<A7*>(a12.getA1_3()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA1_4()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA1_6()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA1_9()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA2()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA3()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA4()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA5()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA6()) == a12.getA7());
+
+ assert(dynamic_cast<A8*>(a12.getA1_3()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA1_4()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA1_6()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA1_9()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA2()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA3()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA4()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA5()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA6()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA7()) == a12.getA8());
+
+ assert(dynamic_cast<A9*>(a12.getA1_3()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA1_4()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA1_6()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA1_9()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA2()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA3()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA4()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA5()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA6()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA7()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA8()) == a12.getA9());
+
+ assert(dynamic_cast<A10*>(a12.getA1_3()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA1_4()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA1_6()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA1_9()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA2()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA3()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA4()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA5()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA6()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA7()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA8()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA9()) == a12.getA10());
+
+ assert(dynamic_cast<A11*>(a12.getA1_3()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA1_4()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA1_6()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA1_9()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA2()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA3()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA4()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA5()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA6()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA7()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA8()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA9()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA10()) == a12.getA11());
+
+ assert(dynamic_cast<A12*>(a12.getA1_3()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA1_4()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA1_6()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA1_9()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA2()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA3()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA4()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA5()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA6()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA7()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA8()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA9()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA10()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA11()) == a12.getA12());
+
+ assert(dynamic_cast<A3*>(a13.getA1_3()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA1_4()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA1_6()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA1_9()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA2()) == a13.getA3());
+
+ assert(dynamic_cast<A4*>(a13.getA1_3()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA1_4()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA1_6()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA1_9()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA2()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA3()) == a13.getA4());
+
+ assert(dynamic_cast<A5*>(a13.getA1_3()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA1_4()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA1_6()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA1_9()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA2()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA3()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA4()) == a13.getA5());
+
+ assert(dynamic_cast<A6*>(a13.getA1_3()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA1_4()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA1_6()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA1_9()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA2()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA3()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA4()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA5()) == a13.getA6());
+
+ assert(dynamic_cast<A7*>(a13.getA1_3()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA1_4()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA1_6()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA1_9()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA2()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA3()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA4()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA5()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA6()) == a13.getA7());
+
+ assert(dynamic_cast<A8*>(a13.getA1_3()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA1_4()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA1_6()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA1_9()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA2()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA3()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA4()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA5()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA6()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA7()) == a13.getA8());
+
+ assert(dynamic_cast<A9*>(a13.getA1_3()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA1_4()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA1_6()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA1_9()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA2()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA3()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA4()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA5()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA6()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA7()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA8()) == a13.getA9());
+
+ assert(dynamic_cast<A10*>(a13.getA1_3()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA1_4()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA1_6()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA1_9()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA2()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA3()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA4()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA5()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA6()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA7()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA8()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA9()) == a13.getA10());
+
+ assert(dynamic_cast<A11*>(a13.getA1_3()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA1_4()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA1_6()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA1_9()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA2()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA3()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA4()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA5()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA6()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA7()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA8()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA9()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA10()) == a13.getA11());
+
+ assert(dynamic_cast<A12*>(a13.getA1_3()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA1_4()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA1_6()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA1_9()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA2()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA3()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA4()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA5()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA6()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA7()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA8()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA9()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA10()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA11()) == a13.getA12());
+
+ assert(dynamic_cast<A13*>(a13.getA1_3()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA1_4()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA1_6()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA1_9()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA2()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA3()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA4()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA5()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA6()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA7()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA8()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA9()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA10()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA11()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA12()) == a13.getA13());
+}
+
+} // 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
+ : protected A1,
+ public virtual A2
+{
+ char _[93481];
+ virtual ~A3() {}
+
+ A1* getA1_3() {return A1::getA1();}
+ A2* getA2() {return A2::getA2();}
+ A3* getA3() {return this;}
+};
+
+struct A4
+ : public virtual A2,
+ public A1
+{
+ char _[13489];
+ virtual ~A4() {}
+
+ A1* getA1_4() {return A1::getA1();}
+ A2* getA2() {return A2::getA2();}
+ A4* getA4() {return this;}
+};
+
+struct A5
+ : public A3,
+ public A4
+{
+ char _[13489];
+ virtual ~A5() {}
+
+ A1* getA1_3() {return A3::getA1();}
+ A1* getA1_4() {return A4::getA1();}
+ A2* getA2() {return A3::getA2();}
+ A3* getA3() {return A3::getA3();}
+ A4* getA4() {return A4::getA4();}
+ A5* getA5() {return this;}
+};
+
+struct A6
+ : public A1
+{
+ char _[81349];
+ virtual ~A6() {}
+
+ A1* getA1_6() {return A1::getA1();}
+ A6* getA6() {return this;}
+};
+
+struct A7
+ : public A5,
+ public A6
+{
+ char _[34819];
+ virtual ~A7() {}
+
+ A1* getA1_3() {return A5::getA1_3();}
+ A1* getA1_4() {return A5::getA1_4();}
+ A1* getA1_6() {return A6::getA1_6();}
+ A2* getA2() {return A5::getA2();}
+ A3* getA3() {return A5::getA3();}
+ A4* getA4() {return A5::getA4();}
+ A5* getA5() {return A5::getA5();}
+ A6* getA6() {return A6::getA6();}
+ A7* getA7() {return this;}
+};
+
+struct A8
+ : public A7
+{
+ char _[3489];
+ virtual ~A8() {}
+
+ A1* getA1_3() {return A7::getA1_3();}
+ A1* getA1_4() {return A7::getA1_4();}
+ A1* getA1_6() {return A7::getA1_6();}
+ A2* getA2() {return A7::getA2();}
+ A3* getA3() {return A7::getA3();}
+ A4* getA4() {return A7::getA4();}
+ A5* getA5() {return A7::getA5();}
+ A6* getA6() {return A7::getA6();}
+ A7* getA7() {return A7::getA7();}
+ A8* getA8() {return this;}
+};
+
+struct A9
+ : public A1
+{
+ char _[3481];
+ virtual ~A9() {}
+
+ A1* getA1_9() {return A1::getA1();}
+ A9* getA9() {return this;}
+};
+
+struct A10
+ : public virtual A8
+{
+ char _[4831];
+ virtual ~A10() {}
+
+ A1* getA1_3() {return A8::getA1_3();}
+ A1* getA1_4() {return A8::getA1_4();}
+ A1* getA1_6() {return A8::getA1_6();}
+ A2* getA2() {return A8::getA2();}
+ A3* getA3() {return A8::getA3();}
+ A4* getA4() {return A8::getA4();}
+ A5* getA5() {return A8::getA5();}
+ A6* getA6() {return A8::getA6();}
+ A7* getA7() {return A8::getA7();}
+ A8* getA8() {return A8::getA8();}
+ A10* getA10() {return this;}
+};
+
+struct A11
+ : public virtual A8,
+ public A9
+{
+ char _[6483];
+ virtual ~A11() {}
+
+ A1* getA1_3() {return A8::getA1_3();}
+ A1* getA1_4() {return A8::getA1_4();}
+ A1* getA1_6() {return A8::getA1_6();}
+ A1* getA1_9() {return A9::getA1_9();}
+ A2* getA2() {return A8::getA2();}
+ A3* getA3() {return A8::getA3();}
+ A4* getA4() {return A8::getA4();}
+ A5* getA5() {return A8::getA5();}
+ A6* getA6() {return A8::getA6();}
+ A7* getA7() {return A8::getA7();}
+ A8* getA8() {return A8::getA8();}
+ A9* getA9() {return A9::getA9();}
+ A11* getA11() {return this;}
+};
+
+struct A12
+ : public A10,
+ public A11
+{
+ char _[2283];
+ virtual ~A12() {}
+
+ A1* getA1_3() {return A10::getA1_3();}
+ A1* getA1_4() {return A10::getA1_4();}
+ A1* getA1_6() {return A10::getA1_6();}
+ A1* getA1_9() {return A11::getA1_9();}
+ A2* getA2() {return A10::getA2();}
+ A3* getA3() {return A10::getA3();}
+ A4* getA4() {return A10::getA4();}
+ A5* getA5() {return A10::getA5();}
+ A6* getA6() {return A10::getA6();}
+ A7* getA7() {return A10::getA7();}
+ A8* getA8() {return A10::getA8();}
+ A9* getA9() {return A11::getA9();}
+ A10* getA10() {return A10::getA10();}
+ A11* getA11() {return A11::getA11();}
+ A12* getA12() {return this;}
+};
+
+struct A13
+ : public A12
+{
+ char _[1283];
+ virtual ~A13() {}
+
+ A1* getA1_3() {return A12::getA1_3();}
+ A1* getA1_4() {return A12::getA1_4();}
+ A1* getA1_6() {return A12::getA1_6();}
+ A1* getA1_9() {return A12::getA1_9();}
+ A2* getA2() {return A12::getA2();}
+ A3* getA3() {return A12::getA3();}
+ A4* getA4() {return A12::getA4();}
+ A5* getA5() {return A12::getA5();}
+ A6* getA6() {return A12::getA6();}
+ A7* getA7() {return A12::getA7();}
+ A8* getA8() {return A12::getA8();}
+ A9* getA9() {return A12::getA9();}
+ A10* getA10() {return A12::getA10();}
+ A11* getA11() {return A12::getA11();}
+ A12* getA12() {return A12::getA12();}
+ A13* getA13() {return this;}
+};
+
+void test()
+{
+ A3 a3;
+ A4 a4;
+ A5 a5;
+ A6 a6;
+ A7 a7;
+ A8 a8;
+ A9 a9;
+ A10 a10;
+ A11 a11;
+ A12 a12;
+ A13 a13;
+
+ assert(dynamic_cast<A3*>(a3.getA1_3()) == 0);
+ assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
+
+ assert(dynamic_cast<A3*>(a4.getA1_4()) == 0);
+ assert(dynamic_cast<A3*>(a4.getA2()) == 0);
+ assert(dynamic_cast<A4*>(a4.getA1_4()) == a4.getA4());
+ assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
+
+ assert(dynamic_cast<A3*>(a5.getA1_3()) == 0);
+ assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
+
+ assert(dynamic_cast<A4*>(a5.getA1_3()) == 0);
+ assert(dynamic_cast<A4*>(a5.getA1_4()) == a5.getA4());
+ assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
+ assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
+
+ assert(dynamic_cast<A5*>(a5.getA1_3()) == 0);
+ assert(dynamic_cast<A5*>(a5.getA1_4()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
+
+ assert(dynamic_cast<A3*>(a6.getA1_6()) == 0);
+
+ assert(dynamic_cast<A4*>(a6.getA1_6()) == 0);
+
+ assert(dynamic_cast<A5*>(a6.getA1_6()) == 0);
+
+ assert(dynamic_cast<A6*>(a6.getA1_6()) == a6.getA6());
+
+ assert(dynamic_cast<A3*>(a7.getA1_3()) == 0);
+ assert(dynamic_cast<A3*>(a7.getA1_4()) == a7.getA3());
+ assert(dynamic_cast<A3*>(a7.getA2()) == a7.getA3());
+
+ assert(dynamic_cast<A4*>(a7.getA1_3()) == 0);
+ assert(dynamic_cast<A4*>(a7.getA1_4()) == a7.getA4());
+ assert(dynamic_cast<A4*>(a7.getA2()) == a7.getA4());
+ assert(dynamic_cast<A4*>(a7.getA3()) == a7.getA4());
+
+ assert(dynamic_cast<A5*>(a7.getA1_3()) == 0);
+ assert(dynamic_cast<A5*>(a7.getA1_4()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA2()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA3()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA4()) == a7.getA5());
+
+ assert(dynamic_cast<A6*>(a7.getA1_3()) == 0);
+ assert(dynamic_cast<A6*>(a7.getA1_4()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA1_6()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA2()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA3()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA4()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA5()) == a7.getA6());
+
+ assert(dynamic_cast<A7*>(a7.getA1_3()) == 0);
+ assert(dynamic_cast<A7*>(a7.getA1_4()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA1_6()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA2()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA3()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA4()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA5()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA6()) == a7.getA7());
+
+ assert(dynamic_cast<A3*>(a8.getA1_3()) == 0);
+ assert(dynamic_cast<A3*>(a8.getA1_4()) == a8.getA3());
+ assert(dynamic_cast<A3*>(a8.getA2()) == a8.getA3());
+
+ assert(dynamic_cast<A4*>(a8.getA1_3()) == 0);
+ assert(dynamic_cast<A4*>(a8.getA1_4()) == a8.getA4());
+ assert(dynamic_cast<A4*>(a8.getA2()) == a8.getA4());
+ assert(dynamic_cast<A4*>(a8.getA3()) == a8.getA4());
+
+ assert(dynamic_cast<A5*>(a8.getA1_3()) == 0);
+ assert(dynamic_cast<A5*>(a8.getA1_4()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA2()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA3()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA4()) == a8.getA5());
+
+ assert(dynamic_cast<A6*>(a8.getA1_3()) == 0);
+ assert(dynamic_cast<A6*>(a8.getA1_4()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA1_6()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA2()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA3()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA4()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA5()) == a8.getA6());
+
+ assert(dynamic_cast<A7*>(a8.getA1_3()) == 0);
+ assert(dynamic_cast<A7*>(a8.getA1_4()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA1_6()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA2()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA3()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA4()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA5()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA6()) == a8.getA7());
+
+ assert(dynamic_cast<A8*>(a8.getA1_3()) == 0);
+ assert(dynamic_cast<A8*>(a8.getA1_4()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA1_6()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA2()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA3()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA4()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA5()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA6()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA7()) == a8.getA8());
+
+ assert(dynamic_cast<A3*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A4*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A5*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A6*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A7*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A8*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A9*>(a9.getA1_9()) == a9.getA9());
+
+ assert(dynamic_cast<A3*>(a10.getA1_3()) == 0);
+ assert(dynamic_cast<A3*>(a10.getA1_4()) == a10.getA3());
+ assert(dynamic_cast<A3*>(a10.getA1_6()) == a10.getA3());
+ assert(dynamic_cast<A3*>(a10.getA2()) == a10.getA3());
+
+ assert(dynamic_cast<A4*>(a10.getA1_3()) == 0);
+ assert(dynamic_cast<A4*>(a10.getA1_4()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA1_6()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA2()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA3()) == a10.getA4());
+
+ assert(dynamic_cast<A5*>(a10.getA1_3()) == 0);
+ assert(dynamic_cast<A5*>(a10.getA1_4()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA1_6()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA2()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA3()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA4()) == a10.getA5());
+
+ assert(dynamic_cast<A6*>(a10.getA1_3()) == 0);
+ assert(dynamic_cast<A6*>(a10.getA1_4()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA1_6()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA2()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA3()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA4()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA5()) == a10.getA6());
+
+ assert(dynamic_cast<A7*>(a10.getA1_3()) == 0);
+ assert(dynamic_cast<A7*>(a10.getA1_4()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA1_6()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA2()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA3()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA4()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA5()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA6()) == a10.getA7());
+
+ assert(dynamic_cast<A8*>(a10.getA1_3()) == 0);
+ assert(dynamic_cast<A8*>(a10.getA1_4()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA1_6()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA2()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA3()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA4()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA5()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA6()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA7()) == a10.getA8());
+
+ assert(dynamic_cast<A9*>(a10.getA1_3()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA1_4()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA1_6()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA2()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA3()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA4()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA5()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA6()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA7()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA8()) == 0);
+
+ assert(dynamic_cast<A10*>(a10.getA1_3()) == 0);
+ assert(dynamic_cast<A10*>(a10.getA1_4()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA1_6()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA2()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA3()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA4()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA5()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA6()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA7()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA8()) == a10.getA10());
+
+ assert(dynamic_cast<A3*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A3*>(a11.getA1_4()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA1_6()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA1_9()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA2()) == a11.getA3());
+
+ assert(dynamic_cast<A4*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A4*>(a11.getA1_4()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA1_6()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA1_9()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA2()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA3()) == a11.getA4());
+
+ assert(dynamic_cast<A5*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A5*>(a11.getA1_4()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA1_6()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA1_9()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA2()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA3()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA4()) == a11.getA5());
+
+ assert(dynamic_cast<A6*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A6*>(a11.getA1_4()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA1_6()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA1_9()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA2()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA3()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA4()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA5()) == a11.getA6());
+
+ assert(dynamic_cast<A7*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A7*>(a11.getA1_4()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA1_6()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA1_9()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA2()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA3()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA4()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA5()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA6()) == a11.getA7());
+
+ assert(dynamic_cast<A8*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A8*>(a11.getA1_4()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA1_6()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA1_9()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA2()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA3()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA4()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA5()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA6()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA7()) == a11.getA8());
+
+ assert(dynamic_cast<A9*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A9*>(a11.getA1_4()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA1_6()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA1_9()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA2()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA3()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA4()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA5()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA6()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA7()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA8()) == a11.getA9());
+
+ assert(dynamic_cast<A10*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA1_4()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA1_6()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA1_9()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA2()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA3()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA4()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA5()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA6()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA7()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA8()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA9()) == 0);
+
+ assert(dynamic_cast<A11*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A11*>(a11.getA1_4()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA1_6()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA1_9()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA2()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA3()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA4()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA5()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA6()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA7()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA8()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA9()) == a11.getA11());
+
+ assert(dynamic_cast<A3*>(a12.getA1_3()) == 0);
+ assert(dynamic_cast<A3*>(a12.getA1_4()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA1_6()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA1_9()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA2()) == a12.getA3());
+
+ assert(dynamic_cast<A4*>(a12.getA1_3()) == 0);
+ assert(dynamic_cast<A4*>(a12.getA1_4()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA1_6()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA1_9()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA2()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA3()) == a12.getA4());
+
+ assert(dynamic_cast<A5*>(a12.getA1_3()) == 0);
+ assert(dynamic_cast<A5*>(a12.getA1_4()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA1_6()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA1_9()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA2()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA3()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA4()) == a12.getA5());
+
+ assert(dynamic_cast<A6*>(a12.getA1_3()) == 0);
+ assert(dynamic_cast<A6*>(a12.getA1_4()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA1_6()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA1_9()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA2()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA3()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA4()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA5()) == a12.getA6());
+
+ assert(dynamic_cast<A7*>(a12.getA1_3()) == 0);
+ assert(dynamic_cast<A7*>(a12.getA1_4()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA1_6()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA1_9()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA2()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA3()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA4()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA5()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA6()) == a12.getA7());
+
+ assert(dynamic_cast<A8*>(a12.getA1_3()) == 0);
+ assert(dynamic_cast<A8*>(a12.getA1_4()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA1_6()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA1_9()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA2()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA3()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA4()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA5()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA6()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA7()) == a12.getA8());
+
+ assert(dynamic_cast<A9*>(a12.getA1_3()) == 0);
+ assert(dynamic_cast<A9*>(a12.getA1_4()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA1_6()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA1_9()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA2()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA3()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA4()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA5()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA6()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA7()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA8()) == a12.getA9());
+
+ assert(dynamic_cast<A10*>(a12.getA1_3()) == 0);
+ assert(dynamic_cast<A10*>(a12.getA1_4()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA1_6()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA1_9()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA2()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA3()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA4()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA5()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA6()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA7()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA8()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA9()) == a12.getA10());
+
+ assert(dynamic_cast<A11*>(a12.getA1_3()) == 0);
+ assert(dynamic_cast<A11*>(a12.getA1_4()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA1_6()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA1_9()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA2()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA3()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA4()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA5()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA6()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA7()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA8()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA9()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA10()) == a12.getA11());
+
+ assert(dynamic_cast<A12*>(a12.getA1_3()) == 0);
+ assert(dynamic_cast<A12*>(a12.getA1_4()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA1_6()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA1_9()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA2()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA3()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA4()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA5()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA6()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA7()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA8()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA9()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA10()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA11()) == a12.getA12());
+
+ assert(dynamic_cast<A3*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A3*>(a13.getA1_4()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA1_6()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA1_9()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA2()) == a13.getA3());
+
+ assert(dynamic_cast<A4*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A4*>(a13.getA1_4()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA1_6()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA1_9()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA2()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA3()) == a13.getA4());
+
+ assert(dynamic_cast<A5*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A5*>(a13.getA1_4()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA1_6()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA1_9()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA2()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA3()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA4()) == a13.getA5());
+
+ assert(dynamic_cast<A6*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A6*>(a13.getA1_4()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA1_6()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA1_9()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA2()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA3()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA4()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA5()) == a13.getA6());
+
+ assert(dynamic_cast<A7*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A7*>(a13.getA1_4()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA1_6()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA1_9()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA2()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA3()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA4()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA5()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA6()) == a13.getA7());
+
+ assert(dynamic_cast<A8*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A8*>(a13.getA1_4()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA1_6()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA1_9()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA2()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA3()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA4()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA5()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA6()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA7()) == a13.getA8());
+
+ assert(dynamic_cast<A9*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A9*>(a13.getA1_4()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA1_6()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA1_9()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA2()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA3()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA4()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA5()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA6()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA7()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA8()) == a13.getA9());
+
+ assert(dynamic_cast<A10*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A10*>(a13.getA1_4()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA1_6()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA1_9()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA2()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA3()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA4()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA5()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA6()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA7()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA8()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA9()) == a13.getA10());
+
+ assert(dynamic_cast<A11*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A11*>(a13.getA1_4()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA1_6()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA1_9()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA2()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA3()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA4()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA5()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA6()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA7()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA8()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA9()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA10()) == a13.getA11());
+
+ assert(dynamic_cast<A12*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A12*>(a13.getA1_4()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA1_6()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA1_9()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA2()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA3()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA4()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA5()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA6()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA7()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA8()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA9()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA10()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA11()) == a13.getA12());
+
+ assert(dynamic_cast<A13*>(a13.getA1_3()) == 0);
+ assert(dynamic_cast<A13*>(a13.getA1_4()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA1_6()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA1_9()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA2()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA3()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA4()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA5()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA6()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA7()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA8()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA9()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA10()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA11()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA12()) == a13.getA13());
+}
+
+} // 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,
+ protected virtual A2
+{
+ char _[93481];
+ virtual ~A3() {}
+
+ A1* getA1_3() {return A1::getA1();}
+ A2* getA2() {return A2::getA2();}
+ A3* getA3() {return this;}
+};
+
+struct A4
+ : public virtual A2,
+ public A1
+{
+ char _[13489];
+ virtual ~A4() {}
+
+ A1* getA1_4() {return A1::getA1();}
+ A2* getA2() {return A2::getA2();}
+ A4* getA4() {return this;}
+};
+
+struct A5
+ : public A3,
+ public A4
+{
+ char _[13489];
+ virtual ~A5() {}
+
+ A1* getA1_3() {return A3::getA1();}
+ A1* getA1_4() {return A4::getA1();}
+ A2* getA2() {return A3::getA2();}
+ A3* getA3() {return A3::getA3();}
+ A4* getA4() {return A4::getA4();}
+ A5* getA5() {return this;}
+};
+
+struct A6
+ : public A1
+{
+ char _[81349];
+ virtual ~A6() {}
+
+ A1* getA1_6() {return A1::getA1();}
+ A6* getA6() {return this;}
+};
+
+struct A7
+ : public A5,
+ public A6
+{
+ char _[34819];
+ virtual ~A7() {}
+
+ A1* getA1_3() {return A5::getA1_3();}
+ A1* getA1_4() {return A5::getA1_4();}
+ A1* getA1_6() {return A6::getA1_6();}
+ A2* getA2() {return A5::getA2();}
+ A3* getA3() {return A5::getA3();}
+ A4* getA4() {return A5::getA4();}
+ A5* getA5() {return A5::getA5();}
+ A6* getA6() {return A6::getA6();}
+ A7* getA7() {return this;}
+};
+
+struct A8
+ : public A7
+{
+ char _[3489];
+ virtual ~A8() {}
+
+ A1* getA1_3() {return A7::getA1_3();}
+ A1* getA1_4() {return A7::getA1_4();}
+ A1* getA1_6() {return A7::getA1_6();}
+ A2* getA2() {return A7::getA2();}
+ A3* getA3() {return A7::getA3();}
+ A4* getA4() {return A7::getA4();}
+ A5* getA5() {return A7::getA5();}
+ A6* getA6() {return A7::getA6();}
+ A7* getA7() {return A7::getA7();}
+ A8* getA8() {return this;}
+};
+
+struct A9
+ : public A1
+{
+ char _[3481];
+ virtual ~A9() {}
+
+ A1* getA1_9() {return A1::getA1();}
+ A9* getA9() {return this;}
+};
+
+struct A10
+ : public virtual A8
+{
+ char _[4831];
+ virtual ~A10() {}
+
+ A1* getA1_3() {return A8::getA1_3();}
+ A1* getA1_4() {return A8::getA1_4();}
+ A1* getA1_6() {return A8::getA1_6();}
+ A2* getA2() {return A8::getA2();}
+ A3* getA3() {return A8::getA3();}
+ A4* getA4() {return A8::getA4();}
+ A5* getA5() {return A8::getA5();}
+ A6* getA6() {return A8::getA6();}
+ A7* getA7() {return A8::getA7();}
+ A8* getA8() {return A8::getA8();}
+ A10* getA10() {return this;}
+};
+
+struct A11
+ : public virtual A8,
+ public A9
+{
+ char _[6483];
+ virtual ~A11() {}
+
+ A1* getA1_3() {return A8::getA1_3();}
+ A1* getA1_4() {return A8::getA1_4();}
+ A1* getA1_6() {return A8::getA1_6();}
+ A1* getA1_9() {return A9::getA1_9();}
+ A2* getA2() {return A8::getA2();}
+ A3* getA3() {return A8::getA3();}
+ A4* getA4() {return A8::getA4();}
+ A5* getA5() {return A8::getA5();}
+ A6* getA6() {return A8::getA6();}
+ A7* getA7() {return A8::getA7();}
+ A8* getA8() {return A8::getA8();}
+ A9* getA9() {return A9::getA9();}
+ A11* getA11() {return this;}
+};
+
+struct A12
+ : public A10,
+ public A11
+{
+ char _[2283];
+ virtual ~A12() {}
+
+ A1* getA1_3() {return A10::getA1_3();}
+ A1* getA1_4() {return A10::getA1_4();}
+ A1* getA1_6() {return A10::getA1_6();}
+ A1* getA1_9() {return A11::getA1_9();}
+ A2* getA2() {return A10::getA2();}
+ A3* getA3() {return A10::getA3();}
+ A4* getA4() {return A10::getA4();}
+ A5* getA5() {return A10::getA5();}
+ A6* getA6() {return A10::getA6();}
+ A7* getA7() {return A10::getA7();}
+ A8* getA8() {return A10::getA8();}
+ A9* getA9() {return A11::getA9();}
+ A10* getA10() {return A10::getA10();}
+ A11* getA11() {return A11::getA11();}
+ A12* getA12() {return this;}
+};
+
+struct A13
+ : public A12
+{
+ char _[1283];
+ virtual ~A13() {}
+
+ A1* getA1_3() {return A12::getA1_3();}
+ A1* getA1_4() {return A12::getA1_4();}
+ A1* getA1_6() {return A12::getA1_6();}
+ A1* getA1_9() {return A12::getA1_9();}
+ A2* getA2() {return A12::getA2();}
+ A3* getA3() {return A12::getA3();}
+ A4* getA4() {return A12::getA4();}
+ A5* getA5() {return A12::getA5();}
+ A6* getA6() {return A12::getA6();}
+ A7* getA7() {return A12::getA7();}
+ A8* getA8() {return A12::getA8();}
+ A9* getA9() {return A12::getA9();}
+ A10* getA10() {return A12::getA10();}
+ A11* getA11() {return A12::getA11();}
+ A12* getA12() {return A12::getA12();}
+ A13* getA13() {return this;}
+};
+
+void test()
+{
+ A3 a3;
+ A4 a4;
+ A5 a5;
+ A6 a6;
+ A7 a7;
+ A8 a8;
+ A9 a9;
+ A10 a10;
+ A11 a11;
+ A12 a12;
+ A13 a13;
+
+ assert(dynamic_cast<A3*>(a3.getA1_3()) == a3.getA3());
+ assert(dynamic_cast<A3*>(a3.getA2()) == 0);
+
+ assert(dynamic_cast<A3*>(a4.getA1_4()) == 0);
+ assert(dynamic_cast<A3*>(a4.getA2()) == 0);
+ assert(dynamic_cast<A4*>(a4.getA1_4()) == a4.getA4());
+ assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
+
+ assert(dynamic_cast<A3*>(a5.getA1_3()) == a5.getA3());
+ assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
+
+ assert(dynamic_cast<A4*>(a5.getA1_3()) == a5.getA4());
+ assert(dynamic_cast<A4*>(a5.getA1_4()) == a5.getA4());
+ assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
+ assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
+
+ assert(dynamic_cast<A5*>(a5.getA1_3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA1_4()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
+ assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
+
+ assert(dynamic_cast<A3*>(a6.getA1_6()) == 0);
+
+ assert(dynamic_cast<A4*>(a6.getA1_6()) == 0);
+
+ assert(dynamic_cast<A5*>(a6.getA1_6()) == 0);
+
+ assert(dynamic_cast<A6*>(a6.getA1_6()) == a6.getA6());
+
+ assert(dynamic_cast<A3*>(a7.getA1_3()) == a7.getA3());
+ assert(dynamic_cast<A3*>(a7.getA1_4()) == a7.getA3());
+ assert(dynamic_cast<A3*>(a7.getA2()) == a7.getA3());
+
+ assert(dynamic_cast<A4*>(a7.getA1_3()) == a7.getA4());
+ assert(dynamic_cast<A4*>(a7.getA1_4()) == a7.getA4());
+ assert(dynamic_cast<A4*>(a7.getA2()) == a7.getA4());
+ assert(dynamic_cast<A4*>(a7.getA3()) == a7.getA4());
+
+ assert(dynamic_cast<A5*>(a7.getA1_3()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA1_4()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA2()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA3()) == a7.getA5());
+ assert(dynamic_cast<A5*>(a7.getA4()) == a7.getA5());
+
+ assert(dynamic_cast<A6*>(a7.getA1_3()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA1_4()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA1_6()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA2()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA3()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA4()) == a7.getA6());
+ assert(dynamic_cast<A6*>(a7.getA5()) == a7.getA6());
+
+ assert(dynamic_cast<A7*>(a7.getA1_3()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA1_4()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA1_6()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA2()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA3()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA4()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA5()) == a7.getA7());
+ assert(dynamic_cast<A7*>(a7.getA6()) == a7.getA7());
+
+ assert(dynamic_cast<A3*>(a8.getA1_3()) == a8.getA3());
+ assert(dynamic_cast<A3*>(a8.getA1_4()) == a8.getA3());
+ assert(dynamic_cast<A3*>(a8.getA2()) == a8.getA3());
+
+ assert(dynamic_cast<A4*>(a8.getA1_3()) == a8.getA4());
+ assert(dynamic_cast<A4*>(a8.getA1_4()) == a8.getA4());
+ assert(dynamic_cast<A4*>(a8.getA2()) == a8.getA4());
+ assert(dynamic_cast<A4*>(a8.getA3()) == a8.getA4());
+
+ assert(dynamic_cast<A5*>(a8.getA1_3()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA1_4()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA2()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA3()) == a8.getA5());
+ assert(dynamic_cast<A5*>(a8.getA4()) == a8.getA5());
+
+ assert(dynamic_cast<A6*>(a8.getA1_3()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA1_4()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA1_6()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA2()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA3()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA4()) == a8.getA6());
+ assert(dynamic_cast<A6*>(a8.getA5()) == a8.getA6());
+
+ assert(dynamic_cast<A7*>(a8.getA1_3()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA1_4()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA1_6()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA2()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA3()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA4()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA5()) == a8.getA7());
+ assert(dynamic_cast<A7*>(a8.getA6()) == a8.getA7());
+
+ assert(dynamic_cast<A8*>(a8.getA1_3()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA1_4()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA1_6()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA2()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA3()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA4()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA5()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA6()) == a8.getA8());
+ assert(dynamic_cast<A8*>(a8.getA7()) == a8.getA8());
+
+ assert(dynamic_cast<A3*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A4*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A5*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A6*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A7*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A8*>(a9.getA1_9()) == 0);
+
+ assert(dynamic_cast<A9*>(a9.getA1_9()) == a9.getA9());
+
+ assert(dynamic_cast<A3*>(a10.getA1_3()) == a10.getA3());
+ assert(dynamic_cast<A3*>(a10.getA1_4()) == a10.getA3());
+ assert(dynamic_cast<A3*>(a10.getA1_6()) == a10.getA3());
+ assert(dynamic_cast<A3*>(a10.getA2()) == a10.getA3());
+
+ assert(dynamic_cast<A4*>(a10.getA1_3()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA1_4()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA1_6()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA2()) == a10.getA4());
+ assert(dynamic_cast<A4*>(a10.getA3()) == a10.getA4());
+
+ assert(dynamic_cast<A5*>(a10.getA1_3()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA1_4()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA1_6()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA2()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA3()) == a10.getA5());
+ assert(dynamic_cast<A5*>(a10.getA4()) == a10.getA5());
+
+ assert(dynamic_cast<A6*>(a10.getA1_3()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA1_4()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA1_6()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA2()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA3()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA4()) == a10.getA6());
+ assert(dynamic_cast<A6*>(a10.getA5()) == a10.getA6());
+
+ assert(dynamic_cast<A7*>(a10.getA1_3()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA1_4()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA1_6()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA2()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA3()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA4()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA5()) == a10.getA7());
+ assert(dynamic_cast<A7*>(a10.getA6()) == a10.getA7());
+
+ assert(dynamic_cast<A8*>(a10.getA1_3()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA1_4()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA1_6()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA2()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA3()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA4()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA5()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA6()) == a10.getA8());
+ assert(dynamic_cast<A8*>(a10.getA7()) == a10.getA8());
+
+ assert(dynamic_cast<A9*>(a10.getA1_3()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA1_4()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA1_6()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA2()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA3()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA4()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA5()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA6()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA7()) == 0);
+ assert(dynamic_cast<A9*>(a10.getA8()) == 0);
+
+ assert(dynamic_cast<A10*>(a10.getA1_3()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA1_4()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA1_6()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA2()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA3()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA4()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA5()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA6()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA7()) == a10.getA10());
+ assert(dynamic_cast<A10*>(a10.getA8()) == a10.getA10());
+
+ assert(dynamic_cast<A3*>(a11.getA1_3()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA1_4()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA1_6()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA1_9()) == a11.getA3());
+ assert(dynamic_cast<A3*>(a11.getA2()) == a11.getA3());
+
+ assert(dynamic_cast<A4*>(a11.getA1_3()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA1_4()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA1_6()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA1_9()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA2()) == a11.getA4());
+ assert(dynamic_cast<A4*>(a11.getA3()) == a11.getA4());
+
+ assert(dynamic_cast<A5*>(a11.getA1_3()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA1_4()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA1_6()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA1_9()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA2()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA3()) == a11.getA5());
+ assert(dynamic_cast<A5*>(a11.getA4()) == a11.getA5());
+
+ assert(dynamic_cast<A6*>(a11.getA1_3()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA1_4()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA1_6()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA1_9()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA2()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA3()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA4()) == a11.getA6());
+ assert(dynamic_cast<A6*>(a11.getA5()) == a11.getA6());
+
+ assert(dynamic_cast<A7*>(a11.getA1_3()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA1_4()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA1_6()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA1_9()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA2()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA3()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA4()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA5()) == a11.getA7());
+ assert(dynamic_cast<A7*>(a11.getA6()) == a11.getA7());
+
+ assert(dynamic_cast<A8*>(a11.getA1_3()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA1_4()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA1_6()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA1_9()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA2()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA3()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA4()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA5()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA6()) == a11.getA8());
+ assert(dynamic_cast<A8*>(a11.getA7()) == a11.getA8());
+
+ assert(dynamic_cast<A9*>(a11.getA1_3()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA1_4()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA1_6()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA1_9()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA2()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA3()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA4()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA5()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA6()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA7()) == a11.getA9());
+ assert(dynamic_cast<A9*>(a11.getA8()) == a11.getA9());
+
+ assert(dynamic_cast<A10*>(a11.getA1_3()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA1_4()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA1_6()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA1_9()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA2()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA3()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA4()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA5()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA6()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA7()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA8()) == 0);
+ assert(dynamic_cast<A10*>(a11.getA9()) == 0);
+
+ assert(dynamic_cast<A11*>(a11.getA1_3()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA1_4()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA1_6()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA1_9()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA2()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA3()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA4()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA5()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA6()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA7()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA8()) == a11.getA11());
+ assert(dynamic_cast<A11*>(a11.getA9()) == a11.getA11());
+
+ assert(dynamic_cast<A3*>(a12.getA1_3()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA1_4()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA1_6()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA1_9()) == a12.getA3());
+ assert(dynamic_cast<A3*>(a12.getA2()) == a12.getA3());
+
+ assert(dynamic_cast<A4*>(a12.getA1_3()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA1_4()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA1_6()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA1_9()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA2()) == a12.getA4());
+ assert(dynamic_cast<A4*>(a12.getA3()) == a12.getA4());
+
+ assert(dynamic_cast<A5*>(a12.getA1_3()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA1_4()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA1_6()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA1_9()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA2()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA3()) == a12.getA5());
+ assert(dynamic_cast<A5*>(a12.getA4()) == a12.getA5());
+
+ assert(dynamic_cast<A6*>(a12.getA1_3()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA1_4()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA1_6()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA1_9()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA2()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA3()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA4()) == a12.getA6());
+ assert(dynamic_cast<A6*>(a12.getA5()) == a12.getA6());
+
+ assert(dynamic_cast<A7*>(a12.getA1_3()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA1_4()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA1_6()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA1_9()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA2()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA3()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA4()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA5()) == a12.getA7());
+ assert(dynamic_cast<A7*>(a12.getA6()) == a12.getA7());
+
+ assert(dynamic_cast<A8*>(a12.getA1_3()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA1_4()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA1_6()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA1_9()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA2()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA3()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA4()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA5()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA6()) == a12.getA8());
+ assert(dynamic_cast<A8*>(a12.getA7()) == a12.getA8());
+
+ assert(dynamic_cast<A9*>(a12.getA1_3()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA1_4()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA1_6()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA1_9()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA2()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA3()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA4()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA5()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA6()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA7()) == a12.getA9());
+ assert(dynamic_cast<A9*>(a12.getA8()) == a12.getA9());
+
+ assert(dynamic_cast<A10*>(a12.getA1_3()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA1_4()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA1_6()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA1_9()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA2()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA3()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA4()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA5()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA6()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA7()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA8()) == a12.getA10());
+ assert(dynamic_cast<A10*>(a12.getA9()) == a12.getA10());
+
+ assert(dynamic_cast<A11*>(a12.getA1_3()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA1_4()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA1_6()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA1_9()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA2()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA3()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA4()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA5()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA6()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA7()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA8()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA9()) == a12.getA11());
+ assert(dynamic_cast<A11*>(a12.getA10()) == a12.getA11());
+
+ assert(dynamic_cast<A12*>(a12.getA1_3()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA1_4()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA1_6()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA1_9()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA2()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA3()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA4()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA5()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA6()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA7()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA8()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA9()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA10()) == a12.getA12());
+ assert(dynamic_cast<A12*>(a12.getA11()) == a12.getA12());
+
+ assert(dynamic_cast<A3*>(a13.getA1_3()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA1_4()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA1_6()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA1_9()) == a13.getA3());
+ assert(dynamic_cast<A3*>(a13.getA2()) == a13.getA3());
+
+ assert(dynamic_cast<A4*>(a13.getA1_3()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA1_4()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA1_6()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA1_9()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA2()) == a13.getA4());
+ assert(dynamic_cast<A4*>(a13.getA3()) == a13.getA4());
+
+ assert(dynamic_cast<A5*>(a13.getA1_3()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA1_4()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA1_6()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA1_9()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA2()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA3()) == a13.getA5());
+ assert(dynamic_cast<A5*>(a13.getA4()) == a13.getA5());
+
+ assert(dynamic_cast<A6*>(a13.getA1_3()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA1_4()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA1_6()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA1_9()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA2()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA3()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA4()) == a13.getA6());
+ assert(dynamic_cast<A6*>(a13.getA5()) == a13.getA6());
+
+ assert(dynamic_cast<A7*>(a13.getA1_3()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA1_4()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA1_6()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA1_9()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA2()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA3()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA4()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA5()) == a13.getA7());
+ assert(dynamic_cast<A7*>(a13.getA6()) == a13.getA7());
+
+ assert(dynamic_cast<A8*>(a13.getA1_3()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA1_4()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA1_6()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA1_9()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA2()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA3()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA4()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA5()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA6()) == a13.getA8());
+ assert(dynamic_cast<A8*>(a13.getA7()) == a13.getA8());
+
+ assert(dynamic_cast<A9*>(a13.getA1_3()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA1_4()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA1_6()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA1_9()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA2()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA3()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA4()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA5()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA6()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA7()) == a13.getA9());
+ assert(dynamic_cast<A9*>(a13.getA8()) == a13.getA9());
+
+ assert(dynamic_cast<A10*>(a13.getA1_3()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA1_4()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA1_6()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA1_9()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA2()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA3()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA4()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA5()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA6()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA7()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA8()) == a13.getA10());
+ assert(dynamic_cast<A10*>(a13.getA9()) == a13.getA10());
+
+ assert(dynamic_cast<A11*>(a13.getA1_3()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA1_4()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA1_6()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA1_9()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA2()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA3()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA4()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA5()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA6()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA7()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA8()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA9()) == a13.getA11());
+ assert(dynamic_cast<A11*>(a13.getA10()) == a13.getA11());
+
+ assert(dynamic_cast<A12*>(a13.getA1_3()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA1_4()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA1_6()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA1_9()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA2()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA3()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA4()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA5()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA6()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA7()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA8()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA9()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA10()) == a13.getA12());
+ assert(dynamic_cast<A12*>(a13.getA11()) == a13.getA12());
+
+ assert(dynamic_cast<A13*>(a13.getA1_3()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA1_4()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA1_6()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA1_9()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA2()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA3()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA4()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA5()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA6()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA7()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA8()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA9()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA10()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA11()) == a13.getA13());
+ assert(dynamic_cast<A13*>(a13.getA12()) == a13.getA13());
+}
+
+} // t3
+
+#include <chrono>
+#include <iostream>
+
+int main()
+{
+ typedef std::chrono::high_resolution_clock Clock;
+ typedef Clock::time_point time_point;
+ typedef std::chrono::duration<double, std::micro> NS;
+ time_point t0 = Clock::now();
+ t1::test();
+ t2::test();
+ t3::test();
+ time_point t1 = Clock::now();
+ std::cout << NS(t1-t0).count() << " microseconds\n";
+}