1//===------------------------- dynamic_cast14.cpp -------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include <cassert>
11
12namespace t1
13{
14
15struct A1
16{
17    char _[43981];
18    virtual ~A1() {}
19
20    A1* getA1() {return this;}
21};
22
23struct A2
24{
25    char _[34981];
26    virtual ~A2() {}
27
28    A2* getA2() {return this;}
29};
30
31struct A3
32    : public A1,
33      public virtual A2
34{
35    char _[93481];
36    virtual ~A3() {}
37
38    A1* getA1_3() {return A1::getA1();}
39    A2* getA2() {return A2::getA2();}
40    A3* getA3() {return this;}
41};
42
43struct A4
44    : public virtual A2,
45      public A1
46{
47    char _[13489];
48    virtual ~A4() {}
49
50    A1* getA1_4() {return A1::getA1();}
51    A2* getA2() {return A2::getA2();}
52    A4* getA4() {return this;}
53};
54
55struct A5
56    : public A3,
57      public A4
58{
59    char _[13489];
60    virtual ~A5() {}
61
62    A1* getA1_3() {return A3::getA1();}
63    A1* getA1_4() {return A4::getA1();}
64    A2* getA2() {return A3::getA2();}
65    A3* getA3() {return A3::getA3();}
66    A4* getA4() {return A4::getA4();}
67    A5* getA5() {return this;}
68};
69
70struct A6
71    : public A1
72{
73    char _[81349];
74    virtual ~A6() {}
75
76    A1* getA1_6() {return A1::getA1();}
77    A6* getA6() {return this;}
78};
79
80struct A7
81    : public A5,
82      public A6
83{
84    char _[34819];
85    virtual ~A7() {}
86
87    A1* getA1_3() {return A5::getA1_3();}
88    A1* getA1_4() {return A5::getA1_4();}
89    A1* getA1_6() {return A6::getA1_6();}
90    A2* getA2() {return A5::getA2();}
91    A3* getA3() {return A5::getA3();}
92    A4* getA4() {return A5::getA4();}
93    A5* getA5() {return A5::getA5();}
94    A6* getA6() {return A6::getA6();}
95    A7* getA7() {return this;}
96};
97
98struct A8
99    : public A7
100{
101    char _[3489];
102    virtual ~A8() {}
103
104    A1* getA1_3() {return A7::getA1_3();}
105    A1* getA1_4() {return A7::getA1_4();}
106    A1* getA1_6() {return A7::getA1_6();}
107    A2* getA2() {return A7::getA2();}
108    A3* getA3() {return A7::getA3();}
109    A4* getA4() {return A7::getA4();}
110    A5* getA5() {return A7::getA5();}
111    A6* getA6() {return A7::getA6();}
112    A7* getA7() {return A7::getA7();}
113    A8* getA8() {return this;}
114};
115
116struct A9
117    : public A1
118{
119    char _[3481];
120    virtual ~A9() {}
121
122    A1* getA1_9() {return A1::getA1();}
123    A9* getA9() {return this;}
124};
125
126struct A10
127    : public virtual A8
128{
129    char _[4831];
130    virtual ~A10() {}
131
132    A1* getA1_3() {return A8::getA1_3();}
133    A1* getA1_4() {return A8::getA1_4();}
134    A1* getA1_6() {return A8::getA1_6();}
135    A2* getA2() {return A8::getA2();}
136    A3* getA3() {return A8::getA3();}
137    A4* getA4() {return A8::getA4();}
138    A5* getA5() {return A8::getA5();}
139    A6* getA6() {return A8::getA6();}
140    A7* getA7() {return A8::getA7();}
141    A8* getA8() {return A8::getA8();}
142    A10* getA10() {return this;}
143};
144
145struct A11
146    : public virtual A8,
147      public A9
148{
149    char _[6483];
150    virtual ~A11() {}
151
152    A1* getA1_3() {return A8::getA1_3();}
153    A1* getA1_4() {return A8::getA1_4();}
154    A1* getA1_6() {return A8::getA1_6();}
155    A1* getA1_9() {return A9::getA1_9();}
156    A2* getA2() {return A8::getA2();}
157    A3* getA3() {return A8::getA3();}
158    A4* getA4() {return A8::getA4();}
159    A5* getA5() {return A8::getA5();}
160    A6* getA6() {return A8::getA6();}
161    A7* getA7() {return A8::getA7();}
162    A8* getA8() {return A8::getA8();}
163    A9* getA9() {return A9::getA9();}
164    A11* getA11() {return this;}
165};
166
167struct A12
168    : public A10,
169      public A11
170{
171    char _[2283];
172    virtual ~A12() {}
173
174    A1* getA1_3() {return A10::getA1_3();}
175    A1* getA1_4() {return A10::getA1_4();}
176    A1* getA1_6() {return A10::getA1_6();}
177    A1* getA1_9() {return A11::getA1_9();}
178    A2* getA2() {return A10::getA2();}
179    A3* getA3() {return A10::getA3();}
180    A4* getA4() {return A10::getA4();}
181    A5* getA5() {return A10::getA5();}
182    A6* getA6() {return A10::getA6();}
183    A7* getA7() {return A10::getA7();}
184    A8* getA8() {return A10::getA8();}
185    A9* getA9() {return A11::getA9();}
186    A10* getA10() {return A10::getA10();}
187    A11* getA11() {return A11::getA11();}
188    A12* getA12() {return this;}
189};
190
191struct A13
192    : public A12
193{
194    char _[1283];
195    virtual ~A13() {}
196
197    A1* getA1_3() {return A12::getA1_3();}
198    A1* getA1_4() {return A12::getA1_4();}
199    A1* getA1_6() {return A12::getA1_6();}
200    A1* getA1_9() {return A12::getA1_9();}
201    A2* getA2() {return A12::getA2();}
202    A3* getA3() {return A12::getA3();}
203    A4* getA4() {return A12::getA4();}
204    A5* getA5() {return A12::getA5();}
205    A6* getA6() {return A12::getA6();}
206    A7* getA7() {return A12::getA7();}
207    A8* getA8() {return A12::getA8();}
208    A9* getA9() {return A12::getA9();}
209    A10* getA10() {return A12::getA10();}
210    A11* getA11() {return A12::getA11();}
211    A12* getA12() {return A12::getA12();}
212    A13* getA13() {return this;}
213};
214
215void test()
216{
217    A3 a3;
218    A4 a4;
219    A5 a5;
220    A6 a6;
221    A7 a7;
222    A8 a8;
223    A9 a9;
224    A10 a10;
225    A11 a11;
226    A12 a12;
227    A13 a13;
228
229    assert(dynamic_cast<A3*>(a3.getA1_3()) == a3.getA3());
230    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
231
232    assert(dynamic_cast<A3*>(a4.getA1_4()) == 0);
233    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
234    assert(dynamic_cast<A4*>(a4.getA1_4()) == a4.getA4());
235    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
236
237    assert(dynamic_cast<A3*>(a5.getA1_3()) == a5.getA3());
238    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
239
240    assert(dynamic_cast<A4*>(a5.getA1_3()) == a5.getA4());
241    assert(dynamic_cast<A4*>(a5.getA1_4()) == a5.getA4());
242    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
243    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
244
245    assert(dynamic_cast<A5*>(a5.getA1_3()) == a5.getA5());
246    assert(dynamic_cast<A5*>(a5.getA1_4()) == a5.getA5());
247    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
248    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
249    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
250    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
251
252    assert(dynamic_cast<A3*>(a6.getA1_6()) == 0);
253
254    assert(dynamic_cast<A4*>(a6.getA1_6()) == 0);
255
256    assert(dynamic_cast<A5*>(a6.getA1_6()) == 0);
257
258    assert(dynamic_cast<A6*>(a6.getA1_6()) == a6.getA6());
259
260    assert(dynamic_cast<A3*>(a7.getA1_3()) == a7.getA3());
261    assert(dynamic_cast<A3*>(a7.getA1_4()) == a7.getA3());
262    assert(dynamic_cast<A3*>(a7.getA2()) == a7.getA3());
263
264    assert(dynamic_cast<A4*>(a7.getA1_3()) == a7.getA4());
265    assert(dynamic_cast<A4*>(a7.getA1_4()) == a7.getA4());
266    assert(dynamic_cast<A4*>(a7.getA2()) == a7.getA4());
267    assert(dynamic_cast<A4*>(a7.getA3()) == a7.getA4());
268
269    assert(dynamic_cast<A5*>(a7.getA1_3()) == a7.getA5());
270    assert(dynamic_cast<A5*>(a7.getA1_4()) == a7.getA5());
271    assert(dynamic_cast<A5*>(a7.getA2()) == a7.getA5());
272    assert(dynamic_cast<A5*>(a7.getA3()) == a7.getA5());
273    assert(dynamic_cast<A5*>(a7.getA4()) == a7.getA5());
274
275    assert(dynamic_cast<A6*>(a7.getA1_3()) == a7.getA6());
276    assert(dynamic_cast<A6*>(a7.getA1_4()) == a7.getA6());
277    assert(dynamic_cast<A6*>(a7.getA1_6()) == a7.getA6());
278    assert(dynamic_cast<A6*>(a7.getA2()) == a7.getA6());
279    assert(dynamic_cast<A6*>(a7.getA3()) == a7.getA6());
280    assert(dynamic_cast<A6*>(a7.getA4()) == a7.getA6());
281    assert(dynamic_cast<A6*>(a7.getA5()) == a7.getA6());
282
283    assert(dynamic_cast<A7*>(a7.getA1_3()) == a7.getA7());
284    assert(dynamic_cast<A7*>(a7.getA1_4()) == a7.getA7());
285    assert(dynamic_cast<A7*>(a7.getA1_6()) == a7.getA7());
286    assert(dynamic_cast<A7*>(a7.getA2()) == a7.getA7());
287    assert(dynamic_cast<A7*>(a7.getA3()) == a7.getA7());
288    assert(dynamic_cast<A7*>(a7.getA4()) == a7.getA7());
289    assert(dynamic_cast<A7*>(a7.getA5()) == a7.getA7());
290    assert(dynamic_cast<A7*>(a7.getA6()) == a7.getA7());
291
292    assert(dynamic_cast<A3*>(a8.getA1_3()) == a8.getA3());
293    assert(dynamic_cast<A3*>(a8.getA1_4()) == a8.getA3());
294    assert(dynamic_cast<A3*>(a8.getA2()) == a8.getA3());
295
296    assert(dynamic_cast<A4*>(a8.getA1_3()) == a8.getA4());
297    assert(dynamic_cast<A4*>(a8.getA1_4()) == a8.getA4());
298    assert(dynamic_cast<A4*>(a8.getA2()) == a8.getA4());
299    assert(dynamic_cast<A4*>(a8.getA3()) == a8.getA4());
300
301    assert(dynamic_cast<A5*>(a8.getA1_3()) == a8.getA5());
302    assert(dynamic_cast<A5*>(a8.getA1_4()) == a8.getA5());
303    assert(dynamic_cast<A5*>(a8.getA2()) == a8.getA5());
304    assert(dynamic_cast<A5*>(a8.getA3()) == a8.getA5());
305    assert(dynamic_cast<A5*>(a8.getA4()) == a8.getA5());
306
307    assert(dynamic_cast<A6*>(a8.getA1_3()) == a8.getA6());
308    assert(dynamic_cast<A6*>(a8.getA1_4()) == a8.getA6());
309    assert(dynamic_cast<A6*>(a8.getA1_6()) == a8.getA6());
310    assert(dynamic_cast<A6*>(a8.getA2()) == a8.getA6());
311    assert(dynamic_cast<A6*>(a8.getA3()) == a8.getA6());
312    assert(dynamic_cast<A6*>(a8.getA4()) == a8.getA6());
313    assert(dynamic_cast<A6*>(a8.getA5()) == a8.getA6());
314
315    assert(dynamic_cast<A7*>(a8.getA1_3()) == a8.getA7());
316    assert(dynamic_cast<A7*>(a8.getA1_4()) == a8.getA7());
317    assert(dynamic_cast<A7*>(a8.getA1_6()) == a8.getA7());
318    assert(dynamic_cast<A7*>(a8.getA2()) == a8.getA7());
319    assert(dynamic_cast<A7*>(a8.getA3()) == a8.getA7());
320    assert(dynamic_cast<A7*>(a8.getA4()) == a8.getA7());
321    assert(dynamic_cast<A7*>(a8.getA5()) == a8.getA7());
322    assert(dynamic_cast<A7*>(a8.getA6()) == a8.getA7());
323
324    assert(dynamic_cast<A8*>(a8.getA1_3()) == a8.getA8());
325    assert(dynamic_cast<A8*>(a8.getA1_4()) == a8.getA8());
326    assert(dynamic_cast<A8*>(a8.getA1_6()) == a8.getA8());
327    assert(dynamic_cast<A8*>(a8.getA2()) == a8.getA8());
328    assert(dynamic_cast<A8*>(a8.getA3()) == a8.getA8());
329    assert(dynamic_cast<A8*>(a8.getA4()) == a8.getA8());
330    assert(dynamic_cast<A8*>(a8.getA5()) == a8.getA8());
331    assert(dynamic_cast<A8*>(a8.getA6()) == a8.getA8());
332    assert(dynamic_cast<A8*>(a8.getA7()) == a8.getA8());
333
334    assert(dynamic_cast<A3*>(a9.getA1_9()) == 0);
335
336    assert(dynamic_cast<A4*>(a9.getA1_9()) == 0);
337
338    assert(dynamic_cast<A5*>(a9.getA1_9()) == 0);
339
340    assert(dynamic_cast<A6*>(a9.getA1_9()) == 0);
341
342    assert(dynamic_cast<A7*>(a9.getA1_9()) == 0);
343
344    assert(dynamic_cast<A8*>(a9.getA1_9()) == 0);
345
346    assert(dynamic_cast<A9*>(a9.getA1_9()) == a9.getA9());
347
348    assert(dynamic_cast<A3*>(a10.getA1_3()) == a10.getA3());
349    assert(dynamic_cast<A3*>(a10.getA1_4()) == a10.getA3());
350    assert(dynamic_cast<A3*>(a10.getA1_6()) == a10.getA3());
351    assert(dynamic_cast<A3*>(a10.getA2()) == a10.getA3());
352
353    assert(dynamic_cast<A4*>(a10.getA1_3()) == a10.getA4());
354    assert(dynamic_cast<A4*>(a10.getA1_4()) == a10.getA4());
355    assert(dynamic_cast<A4*>(a10.getA1_6()) == a10.getA4());
356    assert(dynamic_cast<A4*>(a10.getA2()) == a10.getA4());
357    assert(dynamic_cast<A4*>(a10.getA3()) == a10.getA4());
358
359    assert(dynamic_cast<A5*>(a10.getA1_3()) == a10.getA5());
360    assert(dynamic_cast<A5*>(a10.getA1_4()) == a10.getA5());
361    assert(dynamic_cast<A5*>(a10.getA1_6()) == a10.getA5());
362    assert(dynamic_cast<A5*>(a10.getA2()) == a10.getA5());
363    assert(dynamic_cast<A5*>(a10.getA3()) == a10.getA5());
364    assert(dynamic_cast<A5*>(a10.getA4()) == a10.getA5());
365
366    assert(dynamic_cast<A6*>(a10.getA1_3()) == a10.getA6());
367    assert(dynamic_cast<A6*>(a10.getA1_4()) == a10.getA6());
368    assert(dynamic_cast<A6*>(a10.getA1_6()) == a10.getA6());
369    assert(dynamic_cast<A6*>(a10.getA2()) == a10.getA6());
370    assert(dynamic_cast<A6*>(a10.getA3()) == a10.getA6());
371    assert(dynamic_cast<A6*>(a10.getA4()) == a10.getA6());
372    assert(dynamic_cast<A6*>(a10.getA5()) == a10.getA6());
373
374    assert(dynamic_cast<A7*>(a10.getA1_3()) == a10.getA7());
375    assert(dynamic_cast<A7*>(a10.getA1_4()) == a10.getA7());
376    assert(dynamic_cast<A7*>(a10.getA1_6()) == a10.getA7());
377    assert(dynamic_cast<A7*>(a10.getA2()) == a10.getA7());
378    assert(dynamic_cast<A7*>(a10.getA3()) == a10.getA7());
379    assert(dynamic_cast<A7*>(a10.getA4()) == a10.getA7());
380    assert(dynamic_cast<A7*>(a10.getA5()) == a10.getA7());
381    assert(dynamic_cast<A7*>(a10.getA6()) == a10.getA7());
382
383    assert(dynamic_cast<A8*>(a10.getA1_3()) == a10.getA8());
384    assert(dynamic_cast<A8*>(a10.getA1_4()) == a10.getA8());
385    assert(dynamic_cast<A8*>(a10.getA1_6()) == a10.getA8());
386    assert(dynamic_cast<A8*>(a10.getA2()) == a10.getA8());
387    assert(dynamic_cast<A8*>(a10.getA3()) == a10.getA8());
388    assert(dynamic_cast<A8*>(a10.getA4()) == a10.getA8());
389    assert(dynamic_cast<A8*>(a10.getA5()) == a10.getA8());
390    assert(dynamic_cast<A8*>(a10.getA6()) == a10.getA8());
391    assert(dynamic_cast<A8*>(a10.getA7()) == a10.getA8());
392
393    assert(dynamic_cast<A9*>(a10.getA1_3()) == 0);
394    assert(dynamic_cast<A9*>(a10.getA1_4()) == 0);
395    assert(dynamic_cast<A9*>(a10.getA1_6()) == 0);
396    assert(dynamic_cast<A9*>(a10.getA2()) == 0);
397    assert(dynamic_cast<A9*>(a10.getA3()) == 0);
398    assert(dynamic_cast<A9*>(a10.getA4()) == 0);
399    assert(dynamic_cast<A9*>(a10.getA5()) == 0);
400    assert(dynamic_cast<A9*>(a10.getA6()) == 0);
401    assert(dynamic_cast<A9*>(a10.getA7()) == 0);
402    assert(dynamic_cast<A9*>(a10.getA8()) == 0);
403
404    assert(dynamic_cast<A10*>(a10.getA1_3()) == a10.getA10());
405    assert(dynamic_cast<A10*>(a10.getA1_4()) == a10.getA10());
406    assert(dynamic_cast<A10*>(a10.getA1_6()) == a10.getA10());
407    assert(dynamic_cast<A10*>(a10.getA2()) == a10.getA10());
408    assert(dynamic_cast<A10*>(a10.getA3()) == a10.getA10());
409    assert(dynamic_cast<A10*>(a10.getA4()) == a10.getA10());
410    assert(dynamic_cast<A10*>(a10.getA5()) == a10.getA10());
411    assert(dynamic_cast<A10*>(a10.getA6()) == a10.getA10());
412    assert(dynamic_cast<A10*>(a10.getA7()) == a10.getA10());
413    assert(dynamic_cast<A10*>(a10.getA8()) == a10.getA10());
414
415    assert(dynamic_cast<A3*>(a11.getA1_3()) == a11.getA3());
416    assert(dynamic_cast<A3*>(a11.getA1_4()) == a11.getA3());
417    assert(dynamic_cast<A3*>(a11.getA1_6()) == a11.getA3());
418    assert(dynamic_cast<A3*>(a11.getA1_9()) == a11.getA3());
419    assert(dynamic_cast<A3*>(a11.getA2()) == a11.getA3());
420
421    assert(dynamic_cast<A4*>(a11.getA1_3()) == a11.getA4());
422    assert(dynamic_cast<A4*>(a11.getA1_4()) == a11.getA4());
423    assert(dynamic_cast<A4*>(a11.getA1_6()) == a11.getA4());
424    assert(dynamic_cast<A4*>(a11.getA1_9()) == a11.getA4());
425    assert(dynamic_cast<A4*>(a11.getA2()) == a11.getA4());
426    assert(dynamic_cast<A4*>(a11.getA3()) == a11.getA4());
427
428    assert(dynamic_cast<A5*>(a11.getA1_3()) == a11.getA5());
429    assert(dynamic_cast<A5*>(a11.getA1_4()) == a11.getA5());
430    assert(dynamic_cast<A5*>(a11.getA1_6()) == a11.getA5());
431    assert(dynamic_cast<A5*>(a11.getA1_9()) == a11.getA5());
432    assert(dynamic_cast<A5*>(a11.getA2()) == a11.getA5());
433    assert(dynamic_cast<A5*>(a11.getA3()) == a11.getA5());
434    assert(dynamic_cast<A5*>(a11.getA4()) == a11.getA5());
435
436    assert(dynamic_cast<A6*>(a11.getA1_3()) == a11.getA6());
437    assert(dynamic_cast<A6*>(a11.getA1_4()) == a11.getA6());
438    assert(dynamic_cast<A6*>(a11.getA1_6()) == a11.getA6());
439    assert(dynamic_cast<A6*>(a11.getA1_9()) == a11.getA6());
440    assert(dynamic_cast<A6*>(a11.getA2()) == a11.getA6());
441    assert(dynamic_cast<A6*>(a11.getA3()) == a11.getA6());
442    assert(dynamic_cast<A6*>(a11.getA4()) == a11.getA6());
443    assert(dynamic_cast<A6*>(a11.getA5()) == a11.getA6());
444
445    assert(dynamic_cast<A7*>(a11.getA1_3()) == a11.getA7());
446    assert(dynamic_cast<A7*>(a11.getA1_4()) == a11.getA7());
447    assert(dynamic_cast<A7*>(a11.getA1_6()) == a11.getA7());
448    assert(dynamic_cast<A7*>(a11.getA1_9()) == a11.getA7());
449    assert(dynamic_cast<A7*>(a11.getA2()) == a11.getA7());
450    assert(dynamic_cast<A7*>(a11.getA3()) == a11.getA7());
451    assert(dynamic_cast<A7*>(a11.getA4()) == a11.getA7());
452    assert(dynamic_cast<A7*>(a11.getA5()) == a11.getA7());
453    assert(dynamic_cast<A7*>(a11.getA6()) == a11.getA7());
454
455    assert(dynamic_cast<A8*>(a11.getA1_3()) == a11.getA8());
456    assert(dynamic_cast<A8*>(a11.getA1_4()) == a11.getA8());
457    assert(dynamic_cast<A8*>(a11.getA1_6()) == a11.getA8());
458    assert(dynamic_cast<A8*>(a11.getA1_9()) == a11.getA8());
459    assert(dynamic_cast<A8*>(a11.getA2()) == a11.getA8());
460    assert(dynamic_cast<A8*>(a11.getA3()) == a11.getA8());
461    assert(dynamic_cast<A8*>(a11.getA4()) == a11.getA8());
462    assert(dynamic_cast<A8*>(a11.getA5()) == a11.getA8());
463    assert(dynamic_cast<A8*>(a11.getA6()) == a11.getA8());
464    assert(dynamic_cast<A8*>(a11.getA7()) == a11.getA8());
465
466    assert(dynamic_cast<A9*>(a11.getA1_3()) == a11.getA9());
467    assert(dynamic_cast<A9*>(a11.getA1_4()) == a11.getA9());
468    assert(dynamic_cast<A9*>(a11.getA1_6()) == a11.getA9());
469    assert(dynamic_cast<A9*>(a11.getA1_9()) == a11.getA9());
470    assert(dynamic_cast<A9*>(a11.getA2()) == a11.getA9());
471    assert(dynamic_cast<A9*>(a11.getA3()) == a11.getA9());
472    assert(dynamic_cast<A9*>(a11.getA4()) == a11.getA9());
473    assert(dynamic_cast<A9*>(a11.getA5()) == a11.getA9());
474    assert(dynamic_cast<A9*>(a11.getA6()) == a11.getA9());
475    assert(dynamic_cast<A9*>(a11.getA7()) == a11.getA9());
476    assert(dynamic_cast<A9*>(a11.getA8()) == a11.getA9());
477
478    assert(dynamic_cast<A10*>(a11.getA1_3()) == 0);
479    assert(dynamic_cast<A10*>(a11.getA1_4()) == 0);
480    assert(dynamic_cast<A10*>(a11.getA1_6()) == 0);
481    assert(dynamic_cast<A10*>(a11.getA1_9()) == 0);
482    assert(dynamic_cast<A10*>(a11.getA2()) == 0);
483    assert(dynamic_cast<A10*>(a11.getA3()) == 0);
484    assert(dynamic_cast<A10*>(a11.getA4()) == 0);
485    assert(dynamic_cast<A10*>(a11.getA5()) == 0);
486    assert(dynamic_cast<A10*>(a11.getA6()) == 0);
487    assert(dynamic_cast<A10*>(a11.getA7()) == 0);
488    assert(dynamic_cast<A10*>(a11.getA8()) == 0);
489    assert(dynamic_cast<A10*>(a11.getA9()) == 0);
490
491    assert(dynamic_cast<A11*>(a11.getA1_3()) == a11.getA11());
492    assert(dynamic_cast<A11*>(a11.getA1_4()) == a11.getA11());
493    assert(dynamic_cast<A11*>(a11.getA1_6()) == a11.getA11());
494    assert(dynamic_cast<A11*>(a11.getA1_9()) == a11.getA11());
495    assert(dynamic_cast<A11*>(a11.getA2()) == a11.getA11());
496    assert(dynamic_cast<A11*>(a11.getA3()) == a11.getA11());
497    assert(dynamic_cast<A11*>(a11.getA4()) == a11.getA11());
498    assert(dynamic_cast<A11*>(a11.getA5()) == a11.getA11());
499    assert(dynamic_cast<A11*>(a11.getA6()) == a11.getA11());
500    assert(dynamic_cast<A11*>(a11.getA7()) == a11.getA11());
501    assert(dynamic_cast<A11*>(a11.getA8()) == a11.getA11());
502    assert(dynamic_cast<A11*>(a11.getA9()) == a11.getA11());
503
504    assert(dynamic_cast<A3*>(a12.getA1_3()) == a12.getA3());
505    assert(dynamic_cast<A3*>(a12.getA1_4()) == a12.getA3());
506    assert(dynamic_cast<A3*>(a12.getA1_6()) == a12.getA3());
507    assert(dynamic_cast<A3*>(a12.getA1_9()) == a12.getA3());
508    assert(dynamic_cast<A3*>(a12.getA2()) == a12.getA3());
509
510    assert(dynamic_cast<A4*>(a12.getA1_3()) == a12.getA4());
511    assert(dynamic_cast<A4*>(a12.getA1_4()) == a12.getA4());
512    assert(dynamic_cast<A4*>(a12.getA1_6()) == a12.getA4());
513    assert(dynamic_cast<A4*>(a12.getA1_9()) == a12.getA4());
514    assert(dynamic_cast<A4*>(a12.getA2()) == a12.getA4());
515    assert(dynamic_cast<A4*>(a12.getA3()) == a12.getA4());
516
517    assert(dynamic_cast<A5*>(a12.getA1_3()) == a12.getA5());
518    assert(dynamic_cast<A5*>(a12.getA1_4()) == a12.getA5());
519    assert(dynamic_cast<A5*>(a12.getA1_6()) == a12.getA5());
520    assert(dynamic_cast<A5*>(a12.getA1_9()) == a12.getA5());
521    assert(dynamic_cast<A5*>(a12.getA2()) == a12.getA5());
522    assert(dynamic_cast<A5*>(a12.getA3()) == a12.getA5());
523    assert(dynamic_cast<A5*>(a12.getA4()) == a12.getA5());
524
525    assert(dynamic_cast<A6*>(a12.getA1_3()) == a12.getA6());
526    assert(dynamic_cast<A6*>(a12.getA1_4()) == a12.getA6());
527    assert(dynamic_cast<A6*>(a12.getA1_6()) == a12.getA6());
528    assert(dynamic_cast<A6*>(a12.getA1_9()) == a12.getA6());
529    assert(dynamic_cast<A6*>(a12.getA2()) == a12.getA6());
530    assert(dynamic_cast<A6*>(a12.getA3()) == a12.getA6());
531    assert(dynamic_cast<A6*>(a12.getA4()) == a12.getA6());
532    assert(dynamic_cast<A6*>(a12.getA5()) == a12.getA6());
533
534    assert(dynamic_cast<A7*>(a12.getA1_3()) == a12.getA7());
535    assert(dynamic_cast<A7*>(a12.getA1_4()) == a12.getA7());
536    assert(dynamic_cast<A7*>(a12.getA1_6()) == a12.getA7());
537    assert(dynamic_cast<A7*>(a12.getA1_9()) == a12.getA7());
538    assert(dynamic_cast<A7*>(a12.getA2()) == a12.getA7());
539    assert(dynamic_cast<A7*>(a12.getA3()) == a12.getA7());
540    assert(dynamic_cast<A7*>(a12.getA4()) == a12.getA7());
541    assert(dynamic_cast<A7*>(a12.getA5()) == a12.getA7());
542    assert(dynamic_cast<A7*>(a12.getA6()) == a12.getA7());
543
544    assert(dynamic_cast<A8*>(a12.getA1_3()) == a12.getA8());
545    assert(dynamic_cast<A8*>(a12.getA1_4()) == a12.getA8());
546    assert(dynamic_cast<A8*>(a12.getA1_6()) == a12.getA8());
547    assert(dynamic_cast<A8*>(a12.getA1_9()) == a12.getA8());
548    assert(dynamic_cast<A8*>(a12.getA2()) == a12.getA8());
549    assert(dynamic_cast<A8*>(a12.getA3()) == a12.getA8());
550    assert(dynamic_cast<A8*>(a12.getA4()) == a12.getA8());
551    assert(dynamic_cast<A8*>(a12.getA5()) == a12.getA8());
552    assert(dynamic_cast<A8*>(a12.getA6()) == a12.getA8());
553    assert(dynamic_cast<A8*>(a12.getA7()) == a12.getA8());
554
555    assert(dynamic_cast<A9*>(a12.getA1_3()) == a12.getA9());
556    assert(dynamic_cast<A9*>(a12.getA1_4()) == a12.getA9());
557    assert(dynamic_cast<A9*>(a12.getA1_6()) == a12.getA9());
558    assert(dynamic_cast<A9*>(a12.getA1_9()) == a12.getA9());
559    assert(dynamic_cast<A9*>(a12.getA2()) == a12.getA9());
560    assert(dynamic_cast<A9*>(a12.getA3()) == a12.getA9());
561    assert(dynamic_cast<A9*>(a12.getA4()) == a12.getA9());
562    assert(dynamic_cast<A9*>(a12.getA5()) == a12.getA9());
563    assert(dynamic_cast<A9*>(a12.getA6()) == a12.getA9());
564    assert(dynamic_cast<A9*>(a12.getA7()) == a12.getA9());
565    assert(dynamic_cast<A9*>(a12.getA8()) == a12.getA9());
566
567    assert(dynamic_cast<A10*>(a12.getA1_3()) == a12.getA10());
568    assert(dynamic_cast<A10*>(a12.getA1_4()) == a12.getA10());
569    assert(dynamic_cast<A10*>(a12.getA1_6()) == a12.getA10());
570    assert(dynamic_cast<A10*>(a12.getA1_9()) == a12.getA10());
571    assert(dynamic_cast<A10*>(a12.getA2()) == a12.getA10());
572    assert(dynamic_cast<A10*>(a12.getA3()) == a12.getA10());
573    assert(dynamic_cast<A10*>(a12.getA4()) == a12.getA10());
574    assert(dynamic_cast<A10*>(a12.getA5()) == a12.getA10());
575    assert(dynamic_cast<A10*>(a12.getA6()) == a12.getA10());
576    assert(dynamic_cast<A10*>(a12.getA7()) == a12.getA10());
577    assert(dynamic_cast<A10*>(a12.getA8()) == a12.getA10());
578    assert(dynamic_cast<A10*>(a12.getA9()) == a12.getA10());
579
580    assert(dynamic_cast<A11*>(a12.getA1_3()) == a12.getA11());
581    assert(dynamic_cast<A11*>(a12.getA1_4()) == a12.getA11());
582    assert(dynamic_cast<A11*>(a12.getA1_6()) == a12.getA11());
583    assert(dynamic_cast<A11*>(a12.getA1_9()) == a12.getA11());
584    assert(dynamic_cast<A11*>(a12.getA2()) == a12.getA11());
585    assert(dynamic_cast<A11*>(a12.getA3()) == a12.getA11());
586    assert(dynamic_cast<A11*>(a12.getA4()) == a12.getA11());
587    assert(dynamic_cast<A11*>(a12.getA5()) == a12.getA11());
588    assert(dynamic_cast<A11*>(a12.getA6()) == a12.getA11());
589    assert(dynamic_cast<A11*>(a12.getA7()) == a12.getA11());
590    assert(dynamic_cast<A11*>(a12.getA8()) == a12.getA11());
591    assert(dynamic_cast<A11*>(a12.getA9()) == a12.getA11());
592    assert(dynamic_cast<A11*>(a12.getA10()) == a12.getA11());
593
594    assert(dynamic_cast<A12*>(a12.getA1_3()) == a12.getA12());
595    assert(dynamic_cast<A12*>(a12.getA1_4()) == a12.getA12());
596    assert(dynamic_cast<A12*>(a12.getA1_6()) == a12.getA12());
597    assert(dynamic_cast<A12*>(a12.getA1_9()) == a12.getA12());
598    assert(dynamic_cast<A12*>(a12.getA2()) == a12.getA12());
599    assert(dynamic_cast<A12*>(a12.getA3()) == a12.getA12());
600    assert(dynamic_cast<A12*>(a12.getA4()) == a12.getA12());
601    assert(dynamic_cast<A12*>(a12.getA5()) == a12.getA12());
602    assert(dynamic_cast<A12*>(a12.getA6()) == a12.getA12());
603    assert(dynamic_cast<A12*>(a12.getA7()) == a12.getA12());
604    assert(dynamic_cast<A12*>(a12.getA8()) == a12.getA12());
605    assert(dynamic_cast<A12*>(a12.getA9()) == a12.getA12());
606    assert(dynamic_cast<A12*>(a12.getA10()) == a12.getA12());
607    assert(dynamic_cast<A12*>(a12.getA11()) == a12.getA12());
608
609    assert(dynamic_cast<A3*>(a13.getA1_3()) == a13.getA3());
610    assert(dynamic_cast<A3*>(a13.getA1_4()) == a13.getA3());
611    assert(dynamic_cast<A3*>(a13.getA1_6()) == a13.getA3());
612    assert(dynamic_cast<A3*>(a13.getA1_9()) == a13.getA3());
613    assert(dynamic_cast<A3*>(a13.getA2()) == a13.getA3());
614
615    assert(dynamic_cast<A4*>(a13.getA1_3()) == a13.getA4());
616    assert(dynamic_cast<A4*>(a13.getA1_4()) == a13.getA4());
617    assert(dynamic_cast<A4*>(a13.getA1_6()) == a13.getA4());
618    assert(dynamic_cast<A4*>(a13.getA1_9()) == a13.getA4());
619    assert(dynamic_cast<A4*>(a13.getA2()) == a13.getA4());
620    assert(dynamic_cast<A4*>(a13.getA3()) == a13.getA4());
621
622    assert(dynamic_cast<A5*>(a13.getA1_3()) == a13.getA5());
623    assert(dynamic_cast<A5*>(a13.getA1_4()) == a13.getA5());
624    assert(dynamic_cast<A5*>(a13.getA1_6()) == a13.getA5());
625    assert(dynamic_cast<A5*>(a13.getA1_9()) == a13.getA5());
626    assert(dynamic_cast<A5*>(a13.getA2()) == a13.getA5());
627    assert(dynamic_cast<A5*>(a13.getA3()) == a13.getA5());
628    assert(dynamic_cast<A5*>(a13.getA4()) == a13.getA5());
629
630    assert(dynamic_cast<A6*>(a13.getA1_3()) == a13.getA6());
631    assert(dynamic_cast<A6*>(a13.getA1_4()) == a13.getA6());
632    assert(dynamic_cast<A6*>(a13.getA1_6()) == a13.getA6());
633    assert(dynamic_cast<A6*>(a13.getA1_9()) == a13.getA6());
634    assert(dynamic_cast<A6*>(a13.getA2()) == a13.getA6());
635    assert(dynamic_cast<A6*>(a13.getA3()) == a13.getA6());
636    assert(dynamic_cast<A6*>(a13.getA4()) == a13.getA6());
637    assert(dynamic_cast<A6*>(a13.getA5()) == a13.getA6());
638
639    assert(dynamic_cast<A7*>(a13.getA1_3()) == a13.getA7());
640    assert(dynamic_cast<A7*>(a13.getA1_4()) == a13.getA7());
641    assert(dynamic_cast<A7*>(a13.getA1_6()) == a13.getA7());
642    assert(dynamic_cast<A7*>(a13.getA1_9()) == a13.getA7());
643    assert(dynamic_cast<A7*>(a13.getA2()) == a13.getA7());
644    assert(dynamic_cast<A7*>(a13.getA3()) == a13.getA7());
645    assert(dynamic_cast<A7*>(a13.getA4()) == a13.getA7());
646    assert(dynamic_cast<A7*>(a13.getA5()) == a13.getA7());
647    assert(dynamic_cast<A7*>(a13.getA6()) == a13.getA7());
648
649    assert(dynamic_cast<A8*>(a13.getA1_3()) == a13.getA8());
650    assert(dynamic_cast<A8*>(a13.getA1_4()) == a13.getA8());
651    assert(dynamic_cast<A8*>(a13.getA1_6()) == a13.getA8());
652    assert(dynamic_cast<A8*>(a13.getA1_9()) == a13.getA8());
653    assert(dynamic_cast<A8*>(a13.getA2()) == a13.getA8());
654    assert(dynamic_cast<A8*>(a13.getA3()) == a13.getA8());
655    assert(dynamic_cast<A8*>(a13.getA4()) == a13.getA8());
656    assert(dynamic_cast<A8*>(a13.getA5()) == a13.getA8());
657    assert(dynamic_cast<A8*>(a13.getA6()) == a13.getA8());
658    assert(dynamic_cast<A8*>(a13.getA7()) == a13.getA8());
659
660    assert(dynamic_cast<A9*>(a13.getA1_3()) == a13.getA9());
661    assert(dynamic_cast<A9*>(a13.getA1_4()) == a13.getA9());
662    assert(dynamic_cast<A9*>(a13.getA1_6()) == a13.getA9());
663    assert(dynamic_cast<A9*>(a13.getA1_9()) == a13.getA9());
664    assert(dynamic_cast<A9*>(a13.getA2()) == a13.getA9());
665    assert(dynamic_cast<A9*>(a13.getA3()) == a13.getA9());
666    assert(dynamic_cast<A9*>(a13.getA4()) == a13.getA9());
667    assert(dynamic_cast<A9*>(a13.getA5()) == a13.getA9());
668    assert(dynamic_cast<A9*>(a13.getA6()) == a13.getA9());
669    assert(dynamic_cast<A9*>(a13.getA7()) == a13.getA9());
670    assert(dynamic_cast<A9*>(a13.getA8()) == a13.getA9());
671
672    assert(dynamic_cast<A10*>(a13.getA1_3()) == a13.getA10());
673    assert(dynamic_cast<A10*>(a13.getA1_4()) == a13.getA10());
674    assert(dynamic_cast<A10*>(a13.getA1_6()) == a13.getA10());
675    assert(dynamic_cast<A10*>(a13.getA1_9()) == a13.getA10());
676    assert(dynamic_cast<A10*>(a13.getA2()) == a13.getA10());
677    assert(dynamic_cast<A10*>(a13.getA3()) == a13.getA10());
678    assert(dynamic_cast<A10*>(a13.getA4()) == a13.getA10());
679    assert(dynamic_cast<A10*>(a13.getA5()) == a13.getA10());
680    assert(dynamic_cast<A10*>(a13.getA6()) == a13.getA10());
681    assert(dynamic_cast<A10*>(a13.getA7()) == a13.getA10());
682    assert(dynamic_cast<A10*>(a13.getA8()) == a13.getA10());
683    assert(dynamic_cast<A10*>(a13.getA9()) == a13.getA10());
684
685    assert(dynamic_cast<A11*>(a13.getA1_3()) == a13.getA11());
686    assert(dynamic_cast<A11*>(a13.getA1_4()) == a13.getA11());
687    assert(dynamic_cast<A11*>(a13.getA1_6()) == a13.getA11());
688    assert(dynamic_cast<A11*>(a13.getA1_9()) == a13.getA11());
689    assert(dynamic_cast<A11*>(a13.getA2()) == a13.getA11());
690    assert(dynamic_cast<A11*>(a13.getA3()) == a13.getA11());
691    assert(dynamic_cast<A11*>(a13.getA4()) == a13.getA11());
692    assert(dynamic_cast<A11*>(a13.getA5()) == a13.getA11());
693    assert(dynamic_cast<A11*>(a13.getA6()) == a13.getA11());
694    assert(dynamic_cast<A11*>(a13.getA7()) == a13.getA11());
695    assert(dynamic_cast<A11*>(a13.getA8()) == a13.getA11());
696    assert(dynamic_cast<A11*>(a13.getA9()) == a13.getA11());
697    assert(dynamic_cast<A11*>(a13.getA10()) == a13.getA11());
698
699    assert(dynamic_cast<A12*>(a13.getA1_3()) == a13.getA12());
700    assert(dynamic_cast<A12*>(a13.getA1_4()) == a13.getA12());
701    assert(dynamic_cast<A12*>(a13.getA1_6()) == a13.getA12());
702    assert(dynamic_cast<A12*>(a13.getA1_9()) == a13.getA12());
703    assert(dynamic_cast<A12*>(a13.getA2()) == a13.getA12());
704    assert(dynamic_cast<A12*>(a13.getA3()) == a13.getA12());
705    assert(dynamic_cast<A12*>(a13.getA4()) == a13.getA12());
706    assert(dynamic_cast<A12*>(a13.getA5()) == a13.getA12());
707    assert(dynamic_cast<A12*>(a13.getA6()) == a13.getA12());
708    assert(dynamic_cast<A12*>(a13.getA7()) == a13.getA12());
709    assert(dynamic_cast<A12*>(a13.getA8()) == a13.getA12());
710    assert(dynamic_cast<A12*>(a13.getA9()) == a13.getA12());
711    assert(dynamic_cast<A12*>(a13.getA10()) == a13.getA12());
712    assert(dynamic_cast<A12*>(a13.getA11()) == a13.getA12());
713
714    assert(dynamic_cast<A13*>(a13.getA1_3()) == a13.getA13());
715    assert(dynamic_cast<A13*>(a13.getA1_4()) == a13.getA13());
716    assert(dynamic_cast<A13*>(a13.getA1_6()) == a13.getA13());
717    assert(dynamic_cast<A13*>(a13.getA1_9()) == a13.getA13());
718    assert(dynamic_cast<A13*>(a13.getA2()) == a13.getA13());
719    assert(dynamic_cast<A13*>(a13.getA3()) == a13.getA13());
720    assert(dynamic_cast<A13*>(a13.getA4()) == a13.getA13());
721    assert(dynamic_cast<A13*>(a13.getA5()) == a13.getA13());
722    assert(dynamic_cast<A13*>(a13.getA6()) == a13.getA13());
723    assert(dynamic_cast<A13*>(a13.getA7()) == a13.getA13());
724    assert(dynamic_cast<A13*>(a13.getA8()) == a13.getA13());
725    assert(dynamic_cast<A13*>(a13.getA9()) == a13.getA13());
726    assert(dynamic_cast<A13*>(a13.getA10()) == a13.getA13());
727    assert(dynamic_cast<A13*>(a13.getA11()) == a13.getA13());
728    assert(dynamic_cast<A13*>(a13.getA12()) == a13.getA13());
729}
730
731}  // t1
732
733namespace t2
734{
735
736struct A1
737{
738    char _[43981];
739    virtual ~A1() {}
740
741    A1* getA1() {return this;}
742};
743
744struct A2
745{
746    char _[34981];
747    virtual ~A2() {}
748
749    A2* getA2() {return this;}
750};
751
752struct A3
753    : protected A1,
754      public virtual A2
755{
756    char _[93481];
757    virtual ~A3() {}
758
759    A1* getA1_3() {return A1::getA1();}
760    A2* getA2() {return A2::getA2();}
761    A3* getA3() {return this;}
762};
763
764struct A4
765    : public virtual A2,
766      public A1
767{
768    char _[13489];
769    virtual ~A4() {}
770
771    A1* getA1_4() {return A1::getA1();}
772    A2* getA2() {return A2::getA2();}
773    A4* getA4() {return this;}
774};
775
776struct A5
777    : public A3,
778      public A4
779{
780    char _[13489];
781    virtual ~A5() {}
782
783    A1* getA1_3() {return A3::getA1();}
784    A1* getA1_4() {return A4::getA1();}
785    A2* getA2() {return A3::getA2();}
786    A3* getA3() {return A3::getA3();}
787    A4* getA4() {return A4::getA4();}
788    A5* getA5() {return this;}
789};
790
791struct A6
792    : public A1
793{
794    char _[81349];
795    virtual ~A6() {}
796
797    A1* getA1_6() {return A1::getA1();}
798    A6* getA6() {return this;}
799};
800
801struct A7
802    : public A5,
803      public A6
804{
805    char _[34819];
806    virtual ~A7() {}
807
808    A1* getA1_3() {return A5::getA1_3();}
809    A1* getA1_4() {return A5::getA1_4();}
810    A1* getA1_6() {return A6::getA1_6();}
811    A2* getA2() {return A5::getA2();}
812    A3* getA3() {return A5::getA3();}
813    A4* getA4() {return A5::getA4();}
814    A5* getA5() {return A5::getA5();}
815    A6* getA6() {return A6::getA6();}
816    A7* getA7() {return this;}
817};
818
819struct A8
820    : public A7
821{
822    char _[3489];
823    virtual ~A8() {}
824
825    A1* getA1_3() {return A7::getA1_3();}
826    A1* getA1_4() {return A7::getA1_4();}
827    A1* getA1_6() {return A7::getA1_6();}
828    A2* getA2() {return A7::getA2();}
829    A3* getA3() {return A7::getA3();}
830    A4* getA4() {return A7::getA4();}
831    A5* getA5() {return A7::getA5();}
832    A6* getA6() {return A7::getA6();}
833    A7* getA7() {return A7::getA7();}
834    A8* getA8() {return this;}
835};
836
837struct A9
838    : public A1
839{
840    char _[3481];
841    virtual ~A9() {}
842
843    A1* getA1_9() {return A1::getA1();}
844    A9* getA9() {return this;}
845};
846
847struct A10
848    : public virtual A8
849{
850    char _[4831];
851    virtual ~A10() {}
852
853    A1* getA1_3() {return A8::getA1_3();}
854    A1* getA1_4() {return A8::getA1_4();}
855    A1* getA1_6() {return A8::getA1_6();}
856    A2* getA2() {return A8::getA2();}
857    A3* getA3() {return A8::getA3();}
858    A4* getA4() {return A8::getA4();}
859    A5* getA5() {return A8::getA5();}
860    A6* getA6() {return A8::getA6();}
861    A7* getA7() {return A8::getA7();}
862    A8* getA8() {return A8::getA8();}
863    A10* getA10() {return this;}
864};
865
866struct A11
867    : public virtual A8,
868      public A9
869{
870    char _[6483];
871    virtual ~A11() {}
872
873    A1* getA1_3() {return A8::getA1_3();}
874    A1* getA1_4() {return A8::getA1_4();}
875    A1* getA1_6() {return A8::getA1_6();}
876    A1* getA1_9() {return A9::getA1_9();}
877    A2* getA2() {return A8::getA2();}
878    A3* getA3() {return A8::getA3();}
879    A4* getA4() {return A8::getA4();}
880    A5* getA5() {return A8::getA5();}
881    A6* getA6() {return A8::getA6();}
882    A7* getA7() {return A8::getA7();}
883    A8* getA8() {return A8::getA8();}
884    A9* getA9() {return A9::getA9();}
885    A11* getA11() {return this;}
886};
887
888struct A12
889    : public A10,
890      public A11
891{
892    char _[2283];
893    virtual ~A12() {}
894
895    A1* getA1_3() {return A10::getA1_3();}
896    A1* getA1_4() {return A10::getA1_4();}
897    A1* getA1_6() {return A10::getA1_6();}
898    A1* getA1_9() {return A11::getA1_9();}
899    A2* getA2() {return A10::getA2();}
900    A3* getA3() {return A10::getA3();}
901    A4* getA4() {return A10::getA4();}
902    A5* getA5() {return A10::getA5();}
903    A6* getA6() {return A10::getA6();}
904    A7* getA7() {return A10::getA7();}
905    A8* getA8() {return A10::getA8();}
906    A9* getA9() {return A11::getA9();}
907    A10* getA10() {return A10::getA10();}
908    A11* getA11() {return A11::getA11();}
909    A12* getA12() {return this;}
910};
911
912struct A13
913    : public A12
914{
915    char _[1283];
916    virtual ~A13() {}
917
918    A1* getA1_3() {return A12::getA1_3();}
919    A1* getA1_4() {return A12::getA1_4();}
920    A1* getA1_6() {return A12::getA1_6();}
921    A1* getA1_9() {return A12::getA1_9();}
922    A2* getA2() {return A12::getA2();}
923    A3* getA3() {return A12::getA3();}
924    A4* getA4() {return A12::getA4();}
925    A5* getA5() {return A12::getA5();}
926    A6* getA6() {return A12::getA6();}
927    A7* getA7() {return A12::getA7();}
928    A8* getA8() {return A12::getA8();}
929    A9* getA9() {return A12::getA9();}
930    A10* getA10() {return A12::getA10();}
931    A11* getA11() {return A12::getA11();}
932    A12* getA12() {return A12::getA12();}
933    A13* getA13() {return this;}
934};
935
936void test()
937{
938    A3 a3;
939    A4 a4;
940    A5 a5;
941    A6 a6;
942    A7 a7;
943    A8 a8;
944    A9 a9;
945    A10 a10;
946    A11 a11;
947    A12 a12;
948    A13 a13;
949
950    assert(dynamic_cast<A3*>(a3.getA1_3()) == 0);
951    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
952
953    assert(dynamic_cast<A3*>(a4.getA1_4()) == 0);
954    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
955    assert(dynamic_cast<A4*>(a4.getA1_4()) == a4.getA4());
956    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
957
958    assert(dynamic_cast<A3*>(a5.getA1_3()) == 0);
959    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
960
961    assert(dynamic_cast<A4*>(a5.getA1_3()) == 0);
962    assert(dynamic_cast<A4*>(a5.getA1_4()) == a5.getA4());
963    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
964    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
965
966    assert(dynamic_cast<A5*>(a5.getA1_3()) == 0);
967    assert(dynamic_cast<A5*>(a5.getA1_4()) == a5.getA5());
968    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
969    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
970    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
971    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
972
973    assert(dynamic_cast<A3*>(a6.getA1_6()) == 0);
974
975    assert(dynamic_cast<A4*>(a6.getA1_6()) == 0);
976
977    assert(dynamic_cast<A5*>(a6.getA1_6()) == 0);
978
979    assert(dynamic_cast<A6*>(a6.getA1_6()) == a6.getA6());
980
981    assert(dynamic_cast<A3*>(a7.getA1_3()) == 0);
982    assert(dynamic_cast<A3*>(a7.getA1_4()) == a7.getA3());
983    assert(dynamic_cast<A3*>(a7.getA2()) == a7.getA3());
984
985    assert(dynamic_cast<A4*>(a7.getA1_3()) == 0);
986    assert(dynamic_cast<A4*>(a7.getA1_4()) == a7.getA4());
987    assert(dynamic_cast<A4*>(a7.getA2()) == a7.getA4());
988    assert(dynamic_cast<A4*>(a7.getA3()) == a7.getA4());
989
990    assert(dynamic_cast<A5*>(a7.getA1_3()) == 0);
991    assert(dynamic_cast<A5*>(a7.getA1_4()) == a7.getA5());
992    assert(dynamic_cast<A5*>(a7.getA2()) == a7.getA5());
993    assert(dynamic_cast<A5*>(a7.getA3()) == a7.getA5());
994    assert(dynamic_cast<A5*>(a7.getA4()) == a7.getA5());
995
996    assert(dynamic_cast<A6*>(a7.getA1_3()) == 0);
997    assert(dynamic_cast<A6*>(a7.getA1_4()) == a7.getA6());
998    assert(dynamic_cast<A6*>(a7.getA1_6()) == a7.getA6());
999    assert(dynamic_cast<A6*>(a7.getA2()) == a7.getA6());
1000    assert(dynamic_cast<A6*>(a7.getA3()) == a7.getA6());
1001    assert(dynamic_cast<A6*>(a7.getA4()) == a7.getA6());
1002    assert(dynamic_cast<A6*>(a7.getA5()) == a7.getA6());
1003
1004    assert(dynamic_cast<A7*>(a7.getA1_3()) == 0);
1005    assert(dynamic_cast<A7*>(a7.getA1_4()) == a7.getA7());
1006    assert(dynamic_cast<A7*>(a7.getA1_6()) == a7.getA7());
1007    assert(dynamic_cast<A7*>(a7.getA2()) == a7.getA7());
1008    assert(dynamic_cast<A7*>(a7.getA3()) == a7.getA7());
1009    assert(dynamic_cast<A7*>(a7.getA4()) == a7.getA7());
1010    assert(dynamic_cast<A7*>(a7.getA5()) == a7.getA7());
1011    assert(dynamic_cast<A7*>(a7.getA6()) == a7.getA7());
1012
1013    assert(dynamic_cast<A3*>(a8.getA1_3()) == 0);
1014    assert(dynamic_cast<A3*>(a8.getA1_4()) == a8.getA3());
1015    assert(dynamic_cast<A3*>(a8.getA2()) == a8.getA3());
1016
1017    assert(dynamic_cast<A4*>(a8.getA1_3()) == 0);
1018    assert(dynamic_cast<A4*>(a8.getA1_4()) == a8.getA4());
1019    assert(dynamic_cast<A4*>(a8.getA2()) == a8.getA4());
1020    assert(dynamic_cast<A4*>(a8.getA3()) == a8.getA4());
1021
1022    assert(dynamic_cast<A5*>(a8.getA1_3()) == 0);
1023    assert(dynamic_cast<A5*>(a8.getA1_4()) == a8.getA5());
1024    assert(dynamic_cast<A5*>(a8.getA2()) == a8.getA5());
1025    assert(dynamic_cast<A5*>(a8.getA3()) == a8.getA5());
1026    assert(dynamic_cast<A5*>(a8.getA4()) == a8.getA5());
1027
1028    assert(dynamic_cast<A6*>(a8.getA1_3()) == 0);
1029    assert(dynamic_cast<A6*>(a8.getA1_4()) == a8.getA6());
1030    assert(dynamic_cast<A6*>(a8.getA1_6()) == a8.getA6());
1031    assert(dynamic_cast<A6*>(a8.getA2()) == a8.getA6());
1032    assert(dynamic_cast<A6*>(a8.getA3()) == a8.getA6());
1033    assert(dynamic_cast<A6*>(a8.getA4()) == a8.getA6());
1034    assert(dynamic_cast<A6*>(a8.getA5()) == a8.getA6());
1035
1036    assert(dynamic_cast<A7*>(a8.getA1_3()) == 0);
1037    assert(dynamic_cast<A7*>(a8.getA1_4()) == a8.getA7());
1038    assert(dynamic_cast<A7*>(a8.getA1_6()) == a8.getA7());
1039    assert(dynamic_cast<A7*>(a8.getA2()) == a8.getA7());
1040    assert(dynamic_cast<A7*>(a8.getA3()) == a8.getA7());
1041    assert(dynamic_cast<A7*>(a8.getA4()) == a8.getA7());
1042    assert(dynamic_cast<A7*>(a8.getA5()) == a8.getA7());
1043    assert(dynamic_cast<A7*>(a8.getA6()) == a8.getA7());
1044
1045    assert(dynamic_cast<A8*>(a8.getA1_3()) == 0);
1046    assert(dynamic_cast<A8*>(a8.getA1_4()) == a8.getA8());
1047    assert(dynamic_cast<A8*>(a8.getA1_6()) == a8.getA8());
1048    assert(dynamic_cast<A8*>(a8.getA2()) == a8.getA8());
1049    assert(dynamic_cast<A8*>(a8.getA3()) == a8.getA8());
1050    assert(dynamic_cast<A8*>(a8.getA4()) == a8.getA8());
1051    assert(dynamic_cast<A8*>(a8.getA5()) == a8.getA8());
1052    assert(dynamic_cast<A8*>(a8.getA6()) == a8.getA8());
1053    assert(dynamic_cast<A8*>(a8.getA7()) == a8.getA8());
1054
1055    assert(dynamic_cast<A3*>(a9.getA1_9()) == 0);
1056
1057    assert(dynamic_cast<A4*>(a9.getA1_9()) == 0);
1058
1059    assert(dynamic_cast<A5*>(a9.getA1_9()) == 0);
1060
1061    assert(dynamic_cast<A6*>(a9.getA1_9()) == 0);
1062
1063    assert(dynamic_cast<A7*>(a9.getA1_9()) == 0);
1064
1065    assert(dynamic_cast<A8*>(a9.getA1_9()) == 0);
1066
1067    assert(dynamic_cast<A9*>(a9.getA1_9()) == a9.getA9());
1068
1069    assert(dynamic_cast<A3*>(a10.getA1_3()) == 0);
1070    assert(dynamic_cast<A3*>(a10.getA1_4()) == a10.getA3());
1071    assert(dynamic_cast<A3*>(a10.getA1_6()) == a10.getA3());
1072    assert(dynamic_cast<A3*>(a10.getA2()) == a10.getA3());
1073
1074    assert(dynamic_cast<A4*>(a10.getA1_3()) == 0);
1075    assert(dynamic_cast<A4*>(a10.getA1_4()) == a10.getA4());
1076    assert(dynamic_cast<A4*>(a10.getA1_6()) == a10.getA4());
1077    assert(dynamic_cast<A4*>(a10.getA2()) == a10.getA4());
1078    assert(dynamic_cast<A4*>(a10.getA3()) == a10.getA4());
1079
1080    assert(dynamic_cast<A5*>(a10.getA1_3()) == 0);
1081    assert(dynamic_cast<A5*>(a10.getA1_4()) == a10.getA5());
1082    assert(dynamic_cast<A5*>(a10.getA1_6()) == a10.getA5());
1083    assert(dynamic_cast<A5*>(a10.getA2()) == a10.getA5());
1084    assert(dynamic_cast<A5*>(a10.getA3()) == a10.getA5());
1085    assert(dynamic_cast<A5*>(a10.getA4()) == a10.getA5());
1086
1087    assert(dynamic_cast<A6*>(a10.getA1_3()) == 0);
1088    assert(dynamic_cast<A6*>(a10.getA1_4()) == a10.getA6());
1089    assert(dynamic_cast<A6*>(a10.getA1_6()) == a10.getA6());
1090    assert(dynamic_cast<A6*>(a10.getA2()) == a10.getA6());
1091    assert(dynamic_cast<A6*>(a10.getA3()) == a10.getA6());
1092    assert(dynamic_cast<A6*>(a10.getA4()) == a10.getA6());
1093    assert(dynamic_cast<A6*>(a10.getA5()) == a10.getA6());
1094
1095    assert(dynamic_cast<A7*>(a10.getA1_3()) == 0);
1096    assert(dynamic_cast<A7*>(a10.getA1_4()) == a10.getA7());
1097    assert(dynamic_cast<A7*>(a10.getA1_6()) == a10.getA7());
1098    assert(dynamic_cast<A7*>(a10.getA2()) == a10.getA7());
1099    assert(dynamic_cast<A7*>(a10.getA3()) == a10.getA7());
1100    assert(dynamic_cast<A7*>(a10.getA4()) == a10.getA7());
1101    assert(dynamic_cast<A7*>(a10.getA5()) == a10.getA7());
1102    assert(dynamic_cast<A7*>(a10.getA6()) == a10.getA7());
1103
1104    assert(dynamic_cast<A8*>(a10.getA1_3()) == 0);
1105    assert(dynamic_cast<A8*>(a10.getA1_4()) == a10.getA8());
1106    assert(dynamic_cast<A8*>(a10.getA1_6()) == a10.getA8());
1107    assert(dynamic_cast<A8*>(a10.getA2()) == a10.getA8());
1108    assert(dynamic_cast<A8*>(a10.getA3()) == a10.getA8());
1109    assert(dynamic_cast<A8*>(a10.getA4()) == a10.getA8());
1110    assert(dynamic_cast<A8*>(a10.getA5()) == a10.getA8());
1111    assert(dynamic_cast<A8*>(a10.getA6()) == a10.getA8());
1112    assert(dynamic_cast<A8*>(a10.getA7()) == a10.getA8());
1113
1114    assert(dynamic_cast<A9*>(a10.getA1_3()) == 0);
1115    assert(dynamic_cast<A9*>(a10.getA1_4()) == 0);
1116    assert(dynamic_cast<A9*>(a10.getA1_6()) == 0);
1117    assert(dynamic_cast<A9*>(a10.getA2()) == 0);
1118    assert(dynamic_cast<A9*>(a10.getA3()) == 0);
1119    assert(dynamic_cast<A9*>(a10.getA4()) == 0);
1120    assert(dynamic_cast<A9*>(a10.getA5()) == 0);
1121    assert(dynamic_cast<A9*>(a10.getA6()) == 0);
1122    assert(dynamic_cast<A9*>(a10.getA7()) == 0);
1123    assert(dynamic_cast<A9*>(a10.getA8()) == 0);
1124
1125    assert(dynamic_cast<A10*>(a10.getA1_3()) == 0);
1126    assert(dynamic_cast<A10*>(a10.getA1_4()) == a10.getA10());
1127    assert(dynamic_cast<A10*>(a10.getA1_6()) == a10.getA10());
1128    assert(dynamic_cast<A10*>(a10.getA2()) == a10.getA10());
1129    assert(dynamic_cast<A10*>(a10.getA3()) == a10.getA10());
1130    assert(dynamic_cast<A10*>(a10.getA4()) == a10.getA10());
1131    assert(dynamic_cast<A10*>(a10.getA5()) == a10.getA10());
1132    assert(dynamic_cast<A10*>(a10.getA6()) == a10.getA10());
1133    assert(dynamic_cast<A10*>(a10.getA7()) == a10.getA10());
1134    assert(dynamic_cast<A10*>(a10.getA8()) == a10.getA10());
1135
1136    assert(dynamic_cast<A3*>(a11.getA1_3()) == 0);
1137    assert(dynamic_cast<A3*>(a11.getA1_4()) == a11.getA3());
1138    assert(dynamic_cast<A3*>(a11.getA1_6()) == a11.getA3());
1139    assert(dynamic_cast<A3*>(a11.getA1_9()) == a11.getA3());
1140    assert(dynamic_cast<A3*>(a11.getA2()) == a11.getA3());
1141
1142    assert(dynamic_cast<A4*>(a11.getA1_3()) == 0);
1143    assert(dynamic_cast<A4*>(a11.getA1_4()) == a11.getA4());
1144    assert(dynamic_cast<A4*>(a11.getA1_6()) == a11.getA4());
1145    assert(dynamic_cast<A4*>(a11.getA1_9()) == a11.getA4());
1146    assert(dynamic_cast<A4*>(a11.getA2()) == a11.getA4());
1147    assert(dynamic_cast<A4*>(a11.getA3()) == a11.getA4());
1148
1149    assert(dynamic_cast<A5*>(a11.getA1_3()) == 0);
1150    assert(dynamic_cast<A5*>(a11.getA1_4()) == a11.getA5());
1151    assert(dynamic_cast<A5*>(a11.getA1_6()) == a11.getA5());
1152    assert(dynamic_cast<A5*>(a11.getA1_9()) == a11.getA5());
1153    assert(dynamic_cast<A5*>(a11.getA2()) == a11.getA5());
1154    assert(dynamic_cast<A5*>(a11.getA3()) == a11.getA5());
1155    assert(dynamic_cast<A5*>(a11.getA4()) == a11.getA5());
1156
1157    assert(dynamic_cast<A6*>(a11.getA1_3()) == 0);
1158    assert(dynamic_cast<A6*>(a11.getA1_4()) == a11.getA6());
1159    assert(dynamic_cast<A6*>(a11.getA1_6()) == a11.getA6());
1160    assert(dynamic_cast<A6*>(a11.getA1_9()) == a11.getA6());
1161    assert(dynamic_cast<A6*>(a11.getA2()) == a11.getA6());
1162    assert(dynamic_cast<A6*>(a11.getA3()) == a11.getA6());
1163    assert(dynamic_cast<A6*>(a11.getA4()) == a11.getA6());
1164    assert(dynamic_cast<A6*>(a11.getA5()) == a11.getA6());
1165
1166    assert(dynamic_cast<A7*>(a11.getA1_3()) == 0);
1167    assert(dynamic_cast<A7*>(a11.getA1_4()) == a11.getA7());
1168    assert(dynamic_cast<A7*>(a11.getA1_6()) == a11.getA7());
1169    assert(dynamic_cast<A7*>(a11.getA1_9()) == a11.getA7());
1170    assert(dynamic_cast<A7*>(a11.getA2()) == a11.getA7());
1171    assert(dynamic_cast<A7*>(a11.getA3()) == a11.getA7());
1172    assert(dynamic_cast<A7*>(a11.getA4()) == a11.getA7());
1173    assert(dynamic_cast<A7*>(a11.getA5()) == a11.getA7());
1174    assert(dynamic_cast<A7*>(a11.getA6()) == a11.getA7());
1175
1176    assert(dynamic_cast<A8*>(a11.getA1_3()) == 0);
1177    assert(dynamic_cast<A8*>(a11.getA1_4()) == a11.getA8());
1178    assert(dynamic_cast<A8*>(a11.getA1_6()) == a11.getA8());
1179    assert(dynamic_cast<A8*>(a11.getA1_9()) == a11.getA8());
1180    assert(dynamic_cast<A8*>(a11.getA2()) == a11.getA8());
1181    assert(dynamic_cast<A8*>(a11.getA3()) == a11.getA8());
1182    assert(dynamic_cast<A8*>(a11.getA4()) == a11.getA8());
1183    assert(dynamic_cast<A8*>(a11.getA5()) == a11.getA8());
1184    assert(dynamic_cast<A8*>(a11.getA6()) == a11.getA8());
1185    assert(dynamic_cast<A8*>(a11.getA7()) == a11.getA8());
1186
1187    assert(dynamic_cast<A9*>(a11.getA1_3()) == 0);
1188    assert(dynamic_cast<A9*>(a11.getA1_4()) == a11.getA9());
1189    assert(dynamic_cast<A9*>(a11.getA1_6()) == a11.getA9());
1190    assert(dynamic_cast<A9*>(a11.getA1_9()) == a11.getA9());
1191    assert(dynamic_cast<A9*>(a11.getA2()) == a11.getA9());
1192    assert(dynamic_cast<A9*>(a11.getA3()) == a11.getA9());
1193    assert(dynamic_cast<A9*>(a11.getA4()) == a11.getA9());
1194    assert(dynamic_cast<A9*>(a11.getA5()) == a11.getA9());
1195    assert(dynamic_cast<A9*>(a11.getA6()) == a11.getA9());
1196    assert(dynamic_cast<A9*>(a11.getA7()) == a11.getA9());
1197    assert(dynamic_cast<A9*>(a11.getA8()) == a11.getA9());
1198
1199    assert(dynamic_cast<A10*>(a11.getA1_3()) == 0);
1200    assert(dynamic_cast<A10*>(a11.getA1_4()) == 0);
1201    assert(dynamic_cast<A10*>(a11.getA1_6()) == 0);
1202    assert(dynamic_cast<A10*>(a11.getA1_9()) == 0);
1203    assert(dynamic_cast<A10*>(a11.getA2()) == 0);
1204    assert(dynamic_cast<A10*>(a11.getA3()) == 0);
1205    assert(dynamic_cast<A10*>(a11.getA4()) == 0);
1206    assert(dynamic_cast<A10*>(a11.getA5()) == 0);
1207    assert(dynamic_cast<A10*>(a11.getA6()) == 0);
1208    assert(dynamic_cast<A10*>(a11.getA7()) == 0);
1209    assert(dynamic_cast<A10*>(a11.getA8()) == 0);
1210    assert(dynamic_cast<A10*>(a11.getA9()) == 0);
1211
1212    assert(dynamic_cast<A11*>(a11.getA1_3()) == 0);
1213    assert(dynamic_cast<A11*>(a11.getA1_4()) == a11.getA11());
1214    assert(dynamic_cast<A11*>(a11.getA1_6()) == a11.getA11());
1215    assert(dynamic_cast<A11*>(a11.getA1_9()) == a11.getA11());
1216    assert(dynamic_cast<A11*>(a11.getA2()) == a11.getA11());
1217    assert(dynamic_cast<A11*>(a11.getA3()) == a11.getA11());
1218    assert(dynamic_cast<A11*>(a11.getA4()) == a11.getA11());
1219    assert(dynamic_cast<A11*>(a11.getA5()) == a11.getA11());
1220    assert(dynamic_cast<A11*>(a11.getA6()) == a11.getA11());
1221    assert(dynamic_cast<A11*>(a11.getA7()) == a11.getA11());
1222    assert(dynamic_cast<A11*>(a11.getA8()) == a11.getA11());
1223    assert(dynamic_cast<A11*>(a11.getA9()) == a11.getA11());
1224
1225    assert(dynamic_cast<A3*>(a12.getA1_3()) == 0);
1226    assert(dynamic_cast<A3*>(a12.getA1_4()) == a12.getA3());
1227    assert(dynamic_cast<A3*>(a12.getA1_6()) == a12.getA3());
1228    assert(dynamic_cast<A3*>(a12.getA1_9()) == a12.getA3());
1229    assert(dynamic_cast<A3*>(a12.getA2()) == a12.getA3());
1230
1231    assert(dynamic_cast<A4*>(a12.getA1_3()) == 0);
1232    assert(dynamic_cast<A4*>(a12.getA1_4()) == a12.getA4());
1233    assert(dynamic_cast<A4*>(a12.getA1_6()) == a12.getA4());
1234    assert(dynamic_cast<A4*>(a12.getA1_9()) == a12.getA4());
1235    assert(dynamic_cast<A4*>(a12.getA2()) == a12.getA4());
1236    assert(dynamic_cast<A4*>(a12.getA3()) == a12.getA4());
1237
1238    assert(dynamic_cast<A5*>(a12.getA1_3()) == 0);
1239    assert(dynamic_cast<A5*>(a12.getA1_4()) == a12.getA5());
1240    assert(dynamic_cast<A5*>(a12.getA1_6()) == a12.getA5());
1241    assert(dynamic_cast<A5*>(a12.getA1_9()) == a12.getA5());
1242    assert(dynamic_cast<A5*>(a12.getA2()) == a12.getA5());
1243    assert(dynamic_cast<A5*>(a12.getA3()) == a12.getA5());
1244    assert(dynamic_cast<A5*>(a12.getA4()) == a12.getA5());
1245
1246    assert(dynamic_cast<A6*>(a12.getA1_3()) == 0);
1247    assert(dynamic_cast<A6*>(a12.getA1_4()) == a12.getA6());
1248    assert(dynamic_cast<A6*>(a12.getA1_6()) == a12.getA6());
1249    assert(dynamic_cast<A6*>(a12.getA1_9()) == a12.getA6());
1250    assert(dynamic_cast<A6*>(a12.getA2()) == a12.getA6());
1251    assert(dynamic_cast<A6*>(a12.getA3()) == a12.getA6());
1252    assert(dynamic_cast<A6*>(a12.getA4()) == a12.getA6());
1253    assert(dynamic_cast<A6*>(a12.getA5()) == a12.getA6());
1254
1255    assert(dynamic_cast<A7*>(a12.getA1_3()) == 0);
1256    assert(dynamic_cast<A7*>(a12.getA1_4()) == a12.getA7());
1257    assert(dynamic_cast<A7*>(a12.getA1_6()) == a12.getA7());
1258    assert(dynamic_cast<A7*>(a12.getA1_9()) == a12.getA7());
1259    assert(dynamic_cast<A7*>(a12.getA2()) == a12.getA7());
1260    assert(dynamic_cast<A7*>(a12.getA3()) == a12.getA7());
1261    assert(dynamic_cast<A7*>(a12.getA4()) == a12.getA7());
1262    assert(dynamic_cast<A7*>(a12.getA5()) == a12.getA7());
1263    assert(dynamic_cast<A7*>(a12.getA6()) == a12.getA7());
1264
1265    assert(dynamic_cast<A8*>(a12.getA1_3()) == 0);
1266    assert(dynamic_cast<A8*>(a12.getA1_4()) == a12.getA8());
1267    assert(dynamic_cast<A8*>(a12.getA1_6()) == a12.getA8());
1268    assert(dynamic_cast<A8*>(a12.getA1_9()) == a12.getA8());
1269    assert(dynamic_cast<A8*>(a12.getA2()) == a12.getA8());
1270    assert(dynamic_cast<A8*>(a12.getA3()) == a12.getA8());
1271    assert(dynamic_cast<A8*>(a12.getA4()) == a12.getA8());
1272    assert(dynamic_cast<A8*>(a12.getA5()) == a12.getA8());
1273    assert(dynamic_cast<A8*>(a12.getA6()) == a12.getA8());
1274    assert(dynamic_cast<A8*>(a12.getA7()) == a12.getA8());
1275
1276    assert(dynamic_cast<A9*>(a12.getA1_3()) == 0);
1277    assert(dynamic_cast<A9*>(a12.getA1_4()) == a12.getA9());
1278    assert(dynamic_cast<A9*>(a12.getA1_6()) == a12.getA9());
1279    assert(dynamic_cast<A9*>(a12.getA1_9()) == a12.getA9());
1280    assert(dynamic_cast<A9*>(a12.getA2()) == a12.getA9());
1281    assert(dynamic_cast<A9*>(a12.getA3()) == a12.getA9());
1282    assert(dynamic_cast<A9*>(a12.getA4()) == a12.getA9());
1283    assert(dynamic_cast<A9*>(a12.getA5()) == a12.getA9());
1284    assert(dynamic_cast<A9*>(a12.getA6()) == a12.getA9());
1285    assert(dynamic_cast<A9*>(a12.getA7()) == a12.getA9());
1286    assert(dynamic_cast<A9*>(a12.getA8()) == a12.getA9());
1287
1288    assert(dynamic_cast<A10*>(a12.getA1_3()) == 0);
1289    assert(dynamic_cast<A10*>(a12.getA1_4()) == a12.getA10());
1290    assert(dynamic_cast<A10*>(a12.getA1_6()) == a12.getA10());
1291    assert(dynamic_cast<A10*>(a12.getA1_9()) == a12.getA10());
1292    assert(dynamic_cast<A10*>(a12.getA2()) == a12.getA10());
1293    assert(dynamic_cast<A10*>(a12.getA3()) == a12.getA10());
1294    assert(dynamic_cast<A10*>(a12.getA4()) == a12.getA10());
1295    assert(dynamic_cast<A10*>(a12.getA5()) == a12.getA10());
1296    assert(dynamic_cast<A10*>(a12.getA6()) == a12.getA10());
1297    assert(dynamic_cast<A10*>(a12.getA7()) == a12.getA10());
1298    assert(dynamic_cast<A10*>(a12.getA8()) == a12.getA10());
1299    assert(dynamic_cast<A10*>(a12.getA9()) == a12.getA10());
1300
1301    assert(dynamic_cast<A11*>(a12.getA1_3()) == 0);
1302    assert(dynamic_cast<A11*>(a12.getA1_4()) == a12.getA11());
1303    assert(dynamic_cast<A11*>(a12.getA1_6()) == a12.getA11());
1304    assert(dynamic_cast<A11*>(a12.getA1_9()) == a12.getA11());
1305    assert(dynamic_cast<A11*>(a12.getA2()) == a12.getA11());
1306    assert(dynamic_cast<A11*>(a12.getA3()) == a12.getA11());
1307    assert(dynamic_cast<A11*>(a12.getA4()) == a12.getA11());
1308    assert(dynamic_cast<A11*>(a12.getA5()) == a12.getA11());
1309    assert(dynamic_cast<A11*>(a12.getA6()) == a12.getA11());
1310    assert(dynamic_cast<A11*>(a12.getA7()) == a12.getA11());
1311    assert(dynamic_cast<A11*>(a12.getA8()) == a12.getA11());
1312    assert(dynamic_cast<A11*>(a12.getA9()) == a12.getA11());
1313    assert(dynamic_cast<A11*>(a12.getA10()) == a12.getA11());
1314
1315    assert(dynamic_cast<A12*>(a12.getA1_3()) == 0);
1316    assert(dynamic_cast<A12*>(a12.getA1_4()) == a12.getA12());
1317    assert(dynamic_cast<A12*>(a12.getA1_6()) == a12.getA12());
1318    assert(dynamic_cast<A12*>(a12.getA1_9()) == a12.getA12());
1319    assert(dynamic_cast<A12*>(a12.getA2()) == a12.getA12());
1320    assert(dynamic_cast<A12*>(a12.getA3()) == a12.getA12());
1321    assert(dynamic_cast<A12*>(a12.getA4()) == a12.getA12());
1322    assert(dynamic_cast<A12*>(a12.getA5()) == a12.getA12());
1323    assert(dynamic_cast<A12*>(a12.getA6()) == a12.getA12());
1324    assert(dynamic_cast<A12*>(a12.getA7()) == a12.getA12());
1325    assert(dynamic_cast<A12*>(a12.getA8()) == a12.getA12());
1326    assert(dynamic_cast<A12*>(a12.getA9()) == a12.getA12());
1327    assert(dynamic_cast<A12*>(a12.getA10()) == a12.getA12());
1328    assert(dynamic_cast<A12*>(a12.getA11()) == a12.getA12());
1329
1330    assert(dynamic_cast<A3*>(a13.getA1_3()) == 0);
1331    assert(dynamic_cast<A3*>(a13.getA1_4()) == a13.getA3());
1332    assert(dynamic_cast<A3*>(a13.getA1_6()) == a13.getA3());
1333    assert(dynamic_cast<A3*>(a13.getA1_9()) == a13.getA3());
1334    assert(dynamic_cast<A3*>(a13.getA2()) == a13.getA3());
1335
1336    assert(dynamic_cast<A4*>(a13.getA1_3()) == 0);
1337    assert(dynamic_cast<A4*>(a13.getA1_4()) == a13.getA4());
1338    assert(dynamic_cast<A4*>(a13.getA1_6()) == a13.getA4());
1339    assert(dynamic_cast<A4*>(a13.getA1_9()) == a13.getA4());
1340    assert(dynamic_cast<A4*>(a13.getA2()) == a13.getA4());
1341    assert(dynamic_cast<A4*>(a13.getA3()) == a13.getA4());
1342
1343    assert(dynamic_cast<A5*>(a13.getA1_3()) == 0);
1344    assert(dynamic_cast<A5*>(a13.getA1_4()) == a13.getA5());
1345    assert(dynamic_cast<A5*>(a13.getA1_6()) == a13.getA5());
1346    assert(dynamic_cast<A5*>(a13.getA1_9()) == a13.getA5());
1347    assert(dynamic_cast<A5*>(a13.getA2()) == a13.getA5());
1348    assert(dynamic_cast<A5*>(a13.getA3()) == a13.getA5());
1349    assert(dynamic_cast<A5*>(a13.getA4()) == a13.getA5());
1350
1351    assert(dynamic_cast<A6*>(a13.getA1_3()) == 0);
1352    assert(dynamic_cast<A6*>(a13.getA1_4()) == a13.getA6());
1353    assert(dynamic_cast<A6*>(a13.getA1_6()) == a13.getA6());
1354    assert(dynamic_cast<A6*>(a13.getA1_9()) == a13.getA6());
1355    assert(dynamic_cast<A6*>(a13.getA2()) == a13.getA6());
1356    assert(dynamic_cast<A6*>(a13.getA3()) == a13.getA6());
1357    assert(dynamic_cast<A6*>(a13.getA4()) == a13.getA6());
1358    assert(dynamic_cast<A6*>(a13.getA5()) == a13.getA6());
1359
1360    assert(dynamic_cast<A7*>(a13.getA1_3()) == 0);
1361    assert(dynamic_cast<A7*>(a13.getA1_4()) == a13.getA7());
1362    assert(dynamic_cast<A7*>(a13.getA1_6()) == a13.getA7());
1363    assert(dynamic_cast<A7*>(a13.getA1_9()) == a13.getA7());
1364    assert(dynamic_cast<A7*>(a13.getA2()) == a13.getA7());
1365    assert(dynamic_cast<A7*>(a13.getA3()) == a13.getA7());
1366    assert(dynamic_cast<A7*>(a13.getA4()) == a13.getA7());
1367    assert(dynamic_cast<A7*>(a13.getA5()) == a13.getA7());
1368    assert(dynamic_cast<A7*>(a13.getA6()) == a13.getA7());
1369
1370    assert(dynamic_cast<A8*>(a13.getA1_3()) == 0);
1371    assert(dynamic_cast<A8*>(a13.getA1_4()) == a13.getA8());
1372    assert(dynamic_cast<A8*>(a13.getA1_6()) == a13.getA8());
1373    assert(dynamic_cast<A8*>(a13.getA1_9()) == a13.getA8());
1374    assert(dynamic_cast<A8*>(a13.getA2()) == a13.getA8());
1375    assert(dynamic_cast<A8*>(a13.getA3()) == a13.getA8());
1376    assert(dynamic_cast<A8*>(a13.getA4()) == a13.getA8());
1377    assert(dynamic_cast<A8*>(a13.getA5()) == a13.getA8());
1378    assert(dynamic_cast<A8*>(a13.getA6()) == a13.getA8());
1379    assert(dynamic_cast<A8*>(a13.getA7()) == a13.getA8());
1380
1381    assert(dynamic_cast<A9*>(a13.getA1_3()) == 0);
1382    assert(dynamic_cast<A9*>(a13.getA1_4()) == a13.getA9());
1383    assert(dynamic_cast<A9*>(a13.getA1_6()) == a13.getA9());
1384    assert(dynamic_cast<A9*>(a13.getA1_9()) == a13.getA9());
1385    assert(dynamic_cast<A9*>(a13.getA2()) == a13.getA9());
1386    assert(dynamic_cast<A9*>(a13.getA3()) == a13.getA9());
1387    assert(dynamic_cast<A9*>(a13.getA4()) == a13.getA9());
1388    assert(dynamic_cast<A9*>(a13.getA5()) == a13.getA9());
1389    assert(dynamic_cast<A9*>(a13.getA6()) == a13.getA9());
1390    assert(dynamic_cast<A9*>(a13.getA7()) == a13.getA9());
1391    assert(dynamic_cast<A9*>(a13.getA8()) == a13.getA9());
1392
1393    assert(dynamic_cast<A10*>(a13.getA1_3()) == 0);
1394    assert(dynamic_cast<A10*>(a13.getA1_4()) == a13.getA10());
1395    assert(dynamic_cast<A10*>(a13.getA1_6()) == a13.getA10());
1396    assert(dynamic_cast<A10*>(a13.getA1_9()) == a13.getA10());
1397    assert(dynamic_cast<A10*>(a13.getA2()) == a13.getA10());
1398    assert(dynamic_cast<A10*>(a13.getA3()) == a13.getA10());
1399    assert(dynamic_cast<A10*>(a13.getA4()) == a13.getA10());
1400    assert(dynamic_cast<A10*>(a13.getA5()) == a13.getA10());
1401    assert(dynamic_cast<A10*>(a13.getA6()) == a13.getA10());
1402    assert(dynamic_cast<A10*>(a13.getA7()) == a13.getA10());
1403    assert(dynamic_cast<A10*>(a13.getA8()) == a13.getA10());
1404    assert(dynamic_cast<A10*>(a13.getA9()) == a13.getA10());
1405
1406    assert(dynamic_cast<A11*>(a13.getA1_3()) == 0);
1407    assert(dynamic_cast<A11*>(a13.getA1_4()) == a13.getA11());
1408    assert(dynamic_cast<A11*>(a13.getA1_6()) == a13.getA11());
1409    assert(dynamic_cast<A11*>(a13.getA1_9()) == a13.getA11());
1410    assert(dynamic_cast<A11*>(a13.getA2()) == a13.getA11());
1411    assert(dynamic_cast<A11*>(a13.getA3()) == a13.getA11());
1412    assert(dynamic_cast<A11*>(a13.getA4()) == a13.getA11());
1413    assert(dynamic_cast<A11*>(a13.getA5()) == a13.getA11());
1414    assert(dynamic_cast<A11*>(a13.getA6()) == a13.getA11());
1415    assert(dynamic_cast<A11*>(a13.getA7()) == a13.getA11());
1416    assert(dynamic_cast<A11*>(a13.getA8()) == a13.getA11());
1417    assert(dynamic_cast<A11*>(a13.getA9()) == a13.getA11());
1418    assert(dynamic_cast<A11*>(a13.getA10()) == a13.getA11());
1419
1420    assert(dynamic_cast<A12*>(a13.getA1_3()) == 0);
1421    assert(dynamic_cast<A12*>(a13.getA1_4()) == a13.getA12());
1422    assert(dynamic_cast<A12*>(a13.getA1_6()) == a13.getA12());
1423    assert(dynamic_cast<A12*>(a13.getA1_9()) == a13.getA12());
1424    assert(dynamic_cast<A12*>(a13.getA2()) == a13.getA12());
1425    assert(dynamic_cast<A12*>(a13.getA3()) == a13.getA12());
1426    assert(dynamic_cast<A12*>(a13.getA4()) == a13.getA12());
1427    assert(dynamic_cast<A12*>(a13.getA5()) == a13.getA12());
1428    assert(dynamic_cast<A12*>(a13.getA6()) == a13.getA12());
1429    assert(dynamic_cast<A12*>(a13.getA7()) == a13.getA12());
1430    assert(dynamic_cast<A12*>(a13.getA8()) == a13.getA12());
1431    assert(dynamic_cast<A12*>(a13.getA9()) == a13.getA12());
1432    assert(dynamic_cast<A12*>(a13.getA10()) == a13.getA12());
1433    assert(dynamic_cast<A12*>(a13.getA11()) == a13.getA12());
1434
1435    assert(dynamic_cast<A13*>(a13.getA1_3()) == 0);
1436    assert(dynamic_cast<A13*>(a13.getA1_4()) == a13.getA13());
1437    assert(dynamic_cast<A13*>(a13.getA1_6()) == a13.getA13());
1438    assert(dynamic_cast<A13*>(a13.getA1_9()) == a13.getA13());
1439    assert(dynamic_cast<A13*>(a13.getA2()) == a13.getA13());
1440    assert(dynamic_cast<A13*>(a13.getA3()) == a13.getA13());
1441    assert(dynamic_cast<A13*>(a13.getA4()) == a13.getA13());
1442    assert(dynamic_cast<A13*>(a13.getA5()) == a13.getA13());
1443    assert(dynamic_cast<A13*>(a13.getA6()) == a13.getA13());
1444    assert(dynamic_cast<A13*>(a13.getA7()) == a13.getA13());
1445    assert(dynamic_cast<A13*>(a13.getA8()) == a13.getA13());
1446    assert(dynamic_cast<A13*>(a13.getA9()) == a13.getA13());
1447    assert(dynamic_cast<A13*>(a13.getA10()) == a13.getA13());
1448    assert(dynamic_cast<A13*>(a13.getA11()) == a13.getA13());
1449    assert(dynamic_cast<A13*>(a13.getA12()) == a13.getA13());
1450}
1451
1452}  // t2
1453
1454namespace t3
1455{
1456
1457struct A1
1458{
1459    char _[43981];
1460    virtual ~A1() {}
1461
1462    A1* getA1() {return this;}
1463};
1464
1465struct A2
1466{
1467    char _[34981];
1468    virtual ~A2() {}
1469
1470    A2* getA2() {return this;}
1471};
1472
1473struct A3
1474    : public A1,
1475      protected virtual A2
1476{
1477    char _[93481];
1478    virtual ~A3() {}
1479
1480    A1* getA1_3() {return A1::getA1();}
1481    A2* getA2() {return A2::getA2();}
1482    A3* getA3() {return this;}
1483};
1484
1485struct A4
1486    : public virtual A2,
1487      public A1
1488{
1489    char _[13489];
1490    virtual ~A4() {}
1491
1492    A1* getA1_4() {return A1::getA1();}
1493    A2* getA2() {return A2::getA2();}
1494    A4* getA4() {return this;}
1495};
1496
1497struct A5
1498    : public A3,
1499      public A4
1500{
1501    char _[13489];
1502    virtual ~A5() {}
1503
1504    A1* getA1_3() {return A3::getA1();}
1505    A1* getA1_4() {return A4::getA1();}
1506    A2* getA2() {return A3::getA2();}
1507    A3* getA3() {return A3::getA3();}
1508    A4* getA4() {return A4::getA4();}
1509    A5* getA5() {return this;}
1510};
1511
1512struct A6
1513    : public A1
1514{
1515    char _[81349];
1516    virtual ~A6() {}
1517
1518    A1* getA1_6() {return A1::getA1();}
1519    A6* getA6() {return this;}
1520};
1521
1522struct A7
1523    : public A5,
1524      public A6
1525{
1526    char _[34819];
1527    virtual ~A7() {}
1528
1529    A1* getA1_3() {return A5::getA1_3();}
1530    A1* getA1_4() {return A5::getA1_4();}
1531    A1* getA1_6() {return A6::getA1_6();}
1532    A2* getA2() {return A5::getA2();}
1533    A3* getA3() {return A5::getA3();}
1534    A4* getA4() {return A5::getA4();}
1535    A5* getA5() {return A5::getA5();}
1536    A6* getA6() {return A6::getA6();}
1537    A7* getA7() {return this;}
1538};
1539
1540struct A8
1541    : public A7
1542{
1543    char _[3489];
1544    virtual ~A8() {}
1545
1546    A1* getA1_3() {return A7::getA1_3();}
1547    A1* getA1_4() {return A7::getA1_4();}
1548    A1* getA1_6() {return A7::getA1_6();}
1549    A2* getA2() {return A7::getA2();}
1550    A3* getA3() {return A7::getA3();}
1551    A4* getA4() {return A7::getA4();}
1552    A5* getA5() {return A7::getA5();}
1553    A6* getA6() {return A7::getA6();}
1554    A7* getA7() {return A7::getA7();}
1555    A8* getA8() {return this;}
1556};
1557
1558struct A9
1559    : public A1
1560{
1561    char _[3481];
1562    virtual ~A9() {}
1563
1564    A1* getA1_9() {return A1::getA1();}
1565    A9* getA9() {return this;}
1566};
1567
1568struct A10
1569    : public virtual A8
1570{
1571    char _[4831];
1572    virtual ~A10() {}
1573
1574    A1* getA1_3() {return A8::getA1_3();}
1575    A1* getA1_4() {return A8::getA1_4();}
1576    A1* getA1_6() {return A8::getA1_6();}
1577    A2* getA2() {return A8::getA2();}
1578    A3* getA3() {return A8::getA3();}
1579    A4* getA4() {return A8::getA4();}
1580    A5* getA5() {return A8::getA5();}
1581    A6* getA6() {return A8::getA6();}
1582    A7* getA7() {return A8::getA7();}
1583    A8* getA8() {return A8::getA8();}
1584    A10* getA10() {return this;}
1585};
1586
1587struct A11
1588    : public virtual A8,
1589      public A9
1590{
1591    char _[6483];
1592    virtual ~A11() {}
1593
1594    A1* getA1_3() {return A8::getA1_3();}
1595    A1* getA1_4() {return A8::getA1_4();}
1596    A1* getA1_6() {return A8::getA1_6();}
1597    A1* getA1_9() {return A9::getA1_9();}
1598    A2* getA2() {return A8::getA2();}
1599    A3* getA3() {return A8::getA3();}
1600    A4* getA4() {return A8::getA4();}
1601    A5* getA5() {return A8::getA5();}
1602    A6* getA6() {return A8::getA6();}
1603    A7* getA7() {return A8::getA7();}
1604    A8* getA8() {return A8::getA8();}
1605    A9* getA9() {return A9::getA9();}
1606    A11* getA11() {return this;}
1607};
1608
1609struct A12
1610    : public A10,
1611      public A11
1612{
1613    char _[2283];
1614    virtual ~A12() {}
1615
1616    A1* getA1_3() {return A10::getA1_3();}
1617    A1* getA1_4() {return A10::getA1_4();}
1618    A1* getA1_6() {return A10::getA1_6();}
1619    A1* getA1_9() {return A11::getA1_9();}
1620    A2* getA2() {return A10::getA2();}
1621    A3* getA3() {return A10::getA3();}
1622    A4* getA4() {return A10::getA4();}
1623    A5* getA5() {return A10::getA5();}
1624    A6* getA6() {return A10::getA6();}
1625    A7* getA7() {return A10::getA7();}
1626    A8* getA8() {return A10::getA8();}
1627    A9* getA9() {return A11::getA9();}
1628    A10* getA10() {return A10::getA10();}
1629    A11* getA11() {return A11::getA11();}
1630    A12* getA12() {return this;}
1631};
1632
1633struct A13
1634    : public A12
1635{
1636    char _[1283];
1637    virtual ~A13() {}
1638
1639    A1* getA1_3() {return A12::getA1_3();}
1640    A1* getA1_4() {return A12::getA1_4();}
1641    A1* getA1_6() {return A12::getA1_6();}
1642    A1* getA1_9() {return A12::getA1_9();}
1643    A2* getA2() {return A12::getA2();}
1644    A3* getA3() {return A12::getA3();}
1645    A4* getA4() {return A12::getA4();}
1646    A5* getA5() {return A12::getA5();}
1647    A6* getA6() {return A12::getA6();}
1648    A7* getA7() {return A12::getA7();}
1649    A8* getA8() {return A12::getA8();}
1650    A9* getA9() {return A12::getA9();}
1651    A10* getA10() {return A12::getA10();}
1652    A11* getA11() {return A12::getA11();}
1653    A12* getA12() {return A12::getA12();}
1654    A13* getA13() {return this;}
1655};
1656
1657void test()
1658{
1659    A3 a3;
1660    A4 a4;
1661    A5 a5;
1662    A6 a6;
1663    A7 a7;
1664    A8 a8;
1665    A9 a9;
1666    A10 a10;
1667    A11 a11;
1668    A12 a12;
1669    A13 a13;
1670
1671    assert(dynamic_cast<A3*>(a3.getA1_3()) == a3.getA3());
1672    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
1673
1674    assert(dynamic_cast<A3*>(a4.getA1_4()) == 0);
1675    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
1676    assert(dynamic_cast<A4*>(a4.getA1_4()) == a4.getA4());
1677    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
1678
1679    assert(dynamic_cast<A3*>(a5.getA1_3()) == a5.getA3());
1680    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
1681
1682    assert(dynamic_cast<A4*>(a5.getA1_3()) == a5.getA4());
1683    assert(dynamic_cast<A4*>(a5.getA1_4()) == a5.getA4());
1684    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
1685    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
1686
1687    assert(dynamic_cast<A5*>(a5.getA1_3()) == a5.getA5());
1688    assert(dynamic_cast<A5*>(a5.getA1_4()) == a5.getA5());
1689    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
1690    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
1691    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
1692    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
1693
1694    assert(dynamic_cast<A3*>(a6.getA1_6()) == 0);
1695
1696    assert(dynamic_cast<A4*>(a6.getA1_6()) == 0);
1697
1698    assert(dynamic_cast<A5*>(a6.getA1_6()) == 0);
1699
1700    assert(dynamic_cast<A6*>(a6.getA1_6()) == a6.getA6());
1701
1702    assert(dynamic_cast<A3*>(a7.getA1_3()) == a7.getA3());
1703    assert(dynamic_cast<A3*>(a7.getA1_4()) == a7.getA3());
1704    assert(dynamic_cast<A3*>(a7.getA2()) == a7.getA3());
1705
1706    assert(dynamic_cast<A4*>(a7.getA1_3()) == a7.getA4());
1707    assert(dynamic_cast<A4*>(a7.getA1_4()) == a7.getA4());
1708    assert(dynamic_cast<A4*>(a7.getA2()) == a7.getA4());
1709    assert(dynamic_cast<A4*>(a7.getA3()) == a7.getA4());
1710
1711    assert(dynamic_cast<A5*>(a7.getA1_3()) == a7.getA5());
1712    assert(dynamic_cast<A5*>(a7.getA1_4()) == a7.getA5());
1713    assert(dynamic_cast<A5*>(a7.getA2()) == a7.getA5());
1714    assert(dynamic_cast<A5*>(a7.getA3()) == a7.getA5());
1715    assert(dynamic_cast<A5*>(a7.getA4()) == a7.getA5());
1716
1717    assert(dynamic_cast<A6*>(a7.getA1_3()) == a7.getA6());
1718    assert(dynamic_cast<A6*>(a7.getA1_4()) == a7.getA6());
1719    assert(dynamic_cast<A6*>(a7.getA1_6()) == a7.getA6());
1720    assert(dynamic_cast<A6*>(a7.getA2()) == a7.getA6());
1721    assert(dynamic_cast<A6*>(a7.getA3()) == a7.getA6());
1722    assert(dynamic_cast<A6*>(a7.getA4()) == a7.getA6());
1723    assert(dynamic_cast<A6*>(a7.getA5()) == a7.getA6());
1724
1725    assert(dynamic_cast<A7*>(a7.getA1_3()) == a7.getA7());
1726    assert(dynamic_cast<A7*>(a7.getA1_4()) == a7.getA7());
1727    assert(dynamic_cast<A7*>(a7.getA1_6()) == a7.getA7());
1728    assert(dynamic_cast<A7*>(a7.getA2()) == a7.getA7());
1729    assert(dynamic_cast<A7*>(a7.getA3()) == a7.getA7());
1730    assert(dynamic_cast<A7*>(a7.getA4()) == a7.getA7());
1731    assert(dynamic_cast<A7*>(a7.getA5()) == a7.getA7());
1732    assert(dynamic_cast<A7*>(a7.getA6()) == a7.getA7());
1733
1734    assert(dynamic_cast<A3*>(a8.getA1_3()) == a8.getA3());
1735    assert(dynamic_cast<A3*>(a8.getA1_4()) == a8.getA3());
1736    assert(dynamic_cast<A3*>(a8.getA2()) == a8.getA3());
1737
1738    assert(dynamic_cast<A4*>(a8.getA1_3()) == a8.getA4());
1739    assert(dynamic_cast<A4*>(a8.getA1_4()) == a8.getA4());
1740    assert(dynamic_cast<A4*>(a8.getA2()) == a8.getA4());
1741    assert(dynamic_cast<A4*>(a8.getA3()) == a8.getA4());
1742
1743    assert(dynamic_cast<A5*>(a8.getA1_3()) == a8.getA5());
1744    assert(dynamic_cast<A5*>(a8.getA1_4()) == a8.getA5());
1745    assert(dynamic_cast<A5*>(a8.getA2()) == a8.getA5());
1746    assert(dynamic_cast<A5*>(a8.getA3()) == a8.getA5());
1747    assert(dynamic_cast<A5*>(a8.getA4()) == a8.getA5());
1748
1749    assert(dynamic_cast<A6*>(a8.getA1_3()) == a8.getA6());
1750    assert(dynamic_cast<A6*>(a8.getA1_4()) == a8.getA6());
1751    assert(dynamic_cast<A6*>(a8.getA1_6()) == a8.getA6());
1752    assert(dynamic_cast<A6*>(a8.getA2()) == a8.getA6());
1753    assert(dynamic_cast<A6*>(a8.getA3()) == a8.getA6());
1754    assert(dynamic_cast<A6*>(a8.getA4()) == a8.getA6());
1755    assert(dynamic_cast<A6*>(a8.getA5()) == a8.getA6());
1756
1757    assert(dynamic_cast<A7*>(a8.getA1_3()) == a8.getA7());
1758    assert(dynamic_cast<A7*>(a8.getA1_4()) == a8.getA7());
1759    assert(dynamic_cast<A7*>(a8.getA1_6()) == a8.getA7());
1760    assert(dynamic_cast<A7*>(a8.getA2()) == a8.getA7());
1761    assert(dynamic_cast<A7*>(a8.getA3()) == a8.getA7());
1762    assert(dynamic_cast<A7*>(a8.getA4()) == a8.getA7());
1763    assert(dynamic_cast<A7*>(a8.getA5()) == a8.getA7());
1764    assert(dynamic_cast<A7*>(a8.getA6()) == a8.getA7());
1765
1766    assert(dynamic_cast<A8*>(a8.getA1_3()) == a8.getA8());
1767    assert(dynamic_cast<A8*>(a8.getA1_4()) == a8.getA8());
1768    assert(dynamic_cast<A8*>(a8.getA1_6()) == a8.getA8());
1769    assert(dynamic_cast<A8*>(a8.getA2()) == a8.getA8());
1770    assert(dynamic_cast<A8*>(a8.getA3()) == a8.getA8());
1771    assert(dynamic_cast<A8*>(a8.getA4()) == a8.getA8());
1772    assert(dynamic_cast<A8*>(a8.getA5()) == a8.getA8());
1773    assert(dynamic_cast<A8*>(a8.getA6()) == a8.getA8());
1774    assert(dynamic_cast<A8*>(a8.getA7()) == a8.getA8());
1775
1776    assert(dynamic_cast<A3*>(a9.getA1_9()) == 0);
1777
1778    assert(dynamic_cast<A4*>(a9.getA1_9()) == 0);
1779
1780    assert(dynamic_cast<A5*>(a9.getA1_9()) == 0);
1781
1782    assert(dynamic_cast<A6*>(a9.getA1_9()) == 0);
1783
1784    assert(dynamic_cast<A7*>(a9.getA1_9()) == 0);
1785
1786    assert(dynamic_cast<A8*>(a9.getA1_9()) == 0);
1787
1788    assert(dynamic_cast<A9*>(a9.getA1_9()) == a9.getA9());
1789
1790    assert(dynamic_cast<A3*>(a10.getA1_3()) == a10.getA3());
1791    assert(dynamic_cast<A3*>(a10.getA1_4()) == a10.getA3());
1792    assert(dynamic_cast<A3*>(a10.getA1_6()) == a10.getA3());
1793    assert(dynamic_cast<A3*>(a10.getA2()) == a10.getA3());
1794
1795    assert(dynamic_cast<A4*>(a10.getA1_3()) == a10.getA4());
1796    assert(dynamic_cast<A4*>(a10.getA1_4()) == a10.getA4());
1797    assert(dynamic_cast<A4*>(a10.getA1_6()) == a10.getA4());
1798    assert(dynamic_cast<A4*>(a10.getA2()) == a10.getA4());
1799    assert(dynamic_cast<A4*>(a10.getA3()) == a10.getA4());
1800
1801    assert(dynamic_cast<A5*>(a10.getA1_3()) == a10.getA5());
1802    assert(dynamic_cast<A5*>(a10.getA1_4()) == a10.getA5());
1803    assert(dynamic_cast<A5*>(a10.getA1_6()) == a10.getA5());
1804    assert(dynamic_cast<A5*>(a10.getA2()) == a10.getA5());
1805    assert(dynamic_cast<A5*>(a10.getA3()) == a10.getA5());
1806    assert(dynamic_cast<A5*>(a10.getA4()) == a10.getA5());
1807
1808    assert(dynamic_cast<A6*>(a10.getA1_3()) == a10.getA6());
1809    assert(dynamic_cast<A6*>(a10.getA1_4()) == a10.getA6());
1810    assert(dynamic_cast<A6*>(a10.getA1_6()) == a10.getA6());
1811    assert(dynamic_cast<A6*>(a10.getA2()) == a10.getA6());
1812    assert(dynamic_cast<A6*>(a10.getA3()) == a10.getA6());
1813    assert(dynamic_cast<A6*>(a10.getA4()) == a10.getA6());
1814    assert(dynamic_cast<A6*>(a10.getA5()) == a10.getA6());
1815
1816    assert(dynamic_cast<A7*>(a10.getA1_3()) == a10.getA7());
1817    assert(dynamic_cast<A7*>(a10.getA1_4()) == a10.getA7());
1818    assert(dynamic_cast<A7*>(a10.getA1_6()) == a10.getA7());
1819    assert(dynamic_cast<A7*>(a10.getA2()) == a10.getA7());
1820    assert(dynamic_cast<A7*>(a10.getA3()) == a10.getA7());
1821    assert(dynamic_cast<A7*>(a10.getA4()) == a10.getA7());
1822    assert(dynamic_cast<A7*>(a10.getA5()) == a10.getA7());
1823    assert(dynamic_cast<A7*>(a10.getA6()) == a10.getA7());
1824
1825    assert(dynamic_cast<A8*>(a10.getA1_3()) == a10.getA8());
1826    assert(dynamic_cast<A8*>(a10.getA1_4()) == a10.getA8());
1827    assert(dynamic_cast<A8*>(a10.getA1_6()) == a10.getA8());
1828    assert(dynamic_cast<A8*>(a10.getA2()) == a10.getA8());
1829    assert(dynamic_cast<A8*>(a10.getA3()) == a10.getA8());
1830    assert(dynamic_cast<A8*>(a10.getA4()) == a10.getA8());
1831    assert(dynamic_cast<A8*>(a10.getA5()) == a10.getA8());
1832    assert(dynamic_cast<A8*>(a10.getA6()) == a10.getA8());
1833    assert(dynamic_cast<A8*>(a10.getA7()) == a10.getA8());
1834
1835    assert(dynamic_cast<A9*>(a10.getA1_3()) == 0);
1836    assert(dynamic_cast<A9*>(a10.getA1_4()) == 0);
1837    assert(dynamic_cast<A9*>(a10.getA1_6()) == 0);
1838    assert(dynamic_cast<A9*>(a10.getA2()) == 0);
1839    assert(dynamic_cast<A9*>(a10.getA3()) == 0);
1840    assert(dynamic_cast<A9*>(a10.getA4()) == 0);
1841    assert(dynamic_cast<A9*>(a10.getA5()) == 0);
1842    assert(dynamic_cast<A9*>(a10.getA6()) == 0);
1843    assert(dynamic_cast<A9*>(a10.getA7()) == 0);
1844    assert(dynamic_cast<A9*>(a10.getA8()) == 0);
1845
1846    assert(dynamic_cast<A10*>(a10.getA1_3()) == a10.getA10());
1847    assert(dynamic_cast<A10*>(a10.getA1_4()) == a10.getA10());
1848    assert(dynamic_cast<A10*>(a10.getA1_6()) == a10.getA10());
1849    assert(dynamic_cast<A10*>(a10.getA2()) == a10.getA10());
1850    assert(dynamic_cast<A10*>(a10.getA3()) == a10.getA10());
1851    assert(dynamic_cast<A10*>(a10.getA4()) == a10.getA10());
1852    assert(dynamic_cast<A10*>(a10.getA5()) == a10.getA10());
1853    assert(dynamic_cast<A10*>(a10.getA6()) == a10.getA10());
1854    assert(dynamic_cast<A10*>(a10.getA7()) == a10.getA10());
1855    assert(dynamic_cast<A10*>(a10.getA8()) == a10.getA10());
1856
1857    assert(dynamic_cast<A3*>(a11.getA1_3()) == a11.getA3());
1858    assert(dynamic_cast<A3*>(a11.getA1_4()) == a11.getA3());
1859    assert(dynamic_cast<A3*>(a11.getA1_6()) == a11.getA3());
1860    assert(dynamic_cast<A3*>(a11.getA1_9()) == a11.getA3());
1861    assert(dynamic_cast<A3*>(a11.getA2()) == a11.getA3());
1862
1863    assert(dynamic_cast<A4*>(a11.getA1_3()) == a11.getA4());
1864    assert(dynamic_cast<A4*>(a11.getA1_4()) == a11.getA4());
1865    assert(dynamic_cast<A4*>(a11.getA1_6()) == a11.getA4());
1866    assert(dynamic_cast<A4*>(a11.getA1_9()) == a11.getA4());
1867    assert(dynamic_cast<A4*>(a11.getA2()) == a11.getA4());
1868    assert(dynamic_cast<A4*>(a11.getA3()) == a11.getA4());
1869
1870    assert(dynamic_cast<A5*>(a11.getA1_3()) == a11.getA5());
1871    assert(dynamic_cast<A5*>(a11.getA1_4()) == a11.getA5());
1872    assert(dynamic_cast<A5*>(a11.getA1_6()) == a11.getA5());
1873    assert(dynamic_cast<A5*>(a11.getA1_9()) == a11.getA5());
1874    assert(dynamic_cast<A5*>(a11.getA2()) == a11.getA5());
1875    assert(dynamic_cast<A5*>(a11.getA3()) == a11.getA5());
1876    assert(dynamic_cast<A5*>(a11.getA4()) == a11.getA5());
1877
1878    assert(dynamic_cast<A6*>(a11.getA1_3()) == a11.getA6());
1879    assert(dynamic_cast<A6*>(a11.getA1_4()) == a11.getA6());
1880    assert(dynamic_cast<A6*>(a11.getA1_6()) == a11.getA6());
1881    assert(dynamic_cast<A6*>(a11.getA1_9()) == a11.getA6());
1882    assert(dynamic_cast<A6*>(a11.getA2()) == a11.getA6());
1883    assert(dynamic_cast<A6*>(a11.getA3()) == a11.getA6());
1884    assert(dynamic_cast<A6*>(a11.getA4()) == a11.getA6());
1885    assert(dynamic_cast<A6*>(a11.getA5()) == a11.getA6());
1886
1887    assert(dynamic_cast<A7*>(a11.getA1_3()) == a11.getA7());
1888    assert(dynamic_cast<A7*>(a11.getA1_4()) == a11.getA7());
1889    assert(dynamic_cast<A7*>(a11.getA1_6()) == a11.getA7());
1890    assert(dynamic_cast<A7*>(a11.getA1_9()) == a11.getA7());
1891    assert(dynamic_cast<A7*>(a11.getA2()) == a11.getA7());
1892    assert(dynamic_cast<A7*>(a11.getA3()) == a11.getA7());
1893    assert(dynamic_cast<A7*>(a11.getA4()) == a11.getA7());
1894    assert(dynamic_cast<A7*>(a11.getA5()) == a11.getA7());
1895    assert(dynamic_cast<A7*>(a11.getA6()) == a11.getA7());
1896
1897    assert(dynamic_cast<A8*>(a11.getA1_3()) == a11.getA8());
1898    assert(dynamic_cast<A8*>(a11.getA1_4()) == a11.getA8());
1899    assert(dynamic_cast<A8*>(a11.getA1_6()) == a11.getA8());
1900    assert(dynamic_cast<A8*>(a11.getA1_9()) == a11.getA8());
1901    assert(dynamic_cast<A8*>(a11.getA2()) == a11.getA8());
1902    assert(dynamic_cast<A8*>(a11.getA3()) == a11.getA8());
1903    assert(dynamic_cast<A8*>(a11.getA4()) == a11.getA8());
1904    assert(dynamic_cast<A8*>(a11.getA5()) == a11.getA8());
1905    assert(dynamic_cast<A8*>(a11.getA6()) == a11.getA8());
1906    assert(dynamic_cast<A8*>(a11.getA7()) == a11.getA8());
1907
1908    assert(dynamic_cast<A9*>(a11.getA1_3()) == a11.getA9());
1909    assert(dynamic_cast<A9*>(a11.getA1_4()) == a11.getA9());
1910    assert(dynamic_cast<A9*>(a11.getA1_6()) == a11.getA9());
1911    assert(dynamic_cast<A9*>(a11.getA1_9()) == a11.getA9());
1912    assert(dynamic_cast<A9*>(a11.getA2()) == a11.getA9());
1913    assert(dynamic_cast<A9*>(a11.getA3()) == a11.getA9());
1914    assert(dynamic_cast<A9*>(a11.getA4()) == a11.getA9());
1915    assert(dynamic_cast<A9*>(a11.getA5()) == a11.getA9());
1916    assert(dynamic_cast<A9*>(a11.getA6()) == a11.getA9());
1917    assert(dynamic_cast<A9*>(a11.getA7()) == a11.getA9());
1918    assert(dynamic_cast<A9*>(a11.getA8()) == a11.getA9());
1919
1920    assert(dynamic_cast<A10*>(a11.getA1_3()) == 0);
1921    assert(dynamic_cast<A10*>(a11.getA1_4()) == 0);
1922    assert(dynamic_cast<A10*>(a11.getA1_6()) == 0);
1923    assert(dynamic_cast<A10*>(a11.getA1_9()) == 0);
1924    assert(dynamic_cast<A10*>(a11.getA2()) == 0);
1925    assert(dynamic_cast<A10*>(a11.getA3()) == 0);
1926    assert(dynamic_cast<A10*>(a11.getA4()) == 0);
1927    assert(dynamic_cast<A10*>(a11.getA5()) == 0);
1928    assert(dynamic_cast<A10*>(a11.getA6()) == 0);
1929    assert(dynamic_cast<A10*>(a11.getA7()) == 0);
1930    assert(dynamic_cast<A10*>(a11.getA8()) == 0);
1931    assert(dynamic_cast<A10*>(a11.getA9()) == 0);
1932
1933    assert(dynamic_cast<A11*>(a11.getA1_3()) == a11.getA11());
1934    assert(dynamic_cast<A11*>(a11.getA1_4()) == a11.getA11());
1935    assert(dynamic_cast<A11*>(a11.getA1_6()) == a11.getA11());
1936    assert(dynamic_cast<A11*>(a11.getA1_9()) == a11.getA11());
1937    assert(dynamic_cast<A11*>(a11.getA2()) == a11.getA11());
1938    assert(dynamic_cast<A11*>(a11.getA3()) == a11.getA11());
1939    assert(dynamic_cast<A11*>(a11.getA4()) == a11.getA11());
1940    assert(dynamic_cast<A11*>(a11.getA5()) == a11.getA11());
1941    assert(dynamic_cast<A11*>(a11.getA6()) == a11.getA11());
1942    assert(dynamic_cast<A11*>(a11.getA7()) == a11.getA11());
1943    assert(dynamic_cast<A11*>(a11.getA8()) == a11.getA11());
1944    assert(dynamic_cast<A11*>(a11.getA9()) == a11.getA11());
1945
1946    assert(dynamic_cast<A3*>(a12.getA1_3()) == a12.getA3());
1947    assert(dynamic_cast<A3*>(a12.getA1_4()) == a12.getA3());
1948    assert(dynamic_cast<A3*>(a12.getA1_6()) == a12.getA3());
1949    assert(dynamic_cast<A3*>(a12.getA1_9()) == a12.getA3());
1950    assert(dynamic_cast<A3*>(a12.getA2()) == a12.getA3());
1951
1952    assert(dynamic_cast<A4*>(a12.getA1_3()) == a12.getA4());
1953    assert(dynamic_cast<A4*>(a12.getA1_4()) == a12.getA4());
1954    assert(dynamic_cast<A4*>(a12.getA1_6()) == a12.getA4());
1955    assert(dynamic_cast<A4*>(a12.getA1_9()) == a12.getA4());
1956    assert(dynamic_cast<A4*>(a12.getA2()) == a12.getA4());
1957    assert(dynamic_cast<A4*>(a12.getA3()) == a12.getA4());
1958
1959    assert(dynamic_cast<A5*>(a12.getA1_3()) == a12.getA5());
1960    assert(dynamic_cast<A5*>(a12.getA1_4()) == a12.getA5());
1961    assert(dynamic_cast<A5*>(a12.getA1_6()) == a12.getA5());
1962    assert(dynamic_cast<A5*>(a12.getA1_9()) == a12.getA5());
1963    assert(dynamic_cast<A5*>(a12.getA2()) == a12.getA5());
1964    assert(dynamic_cast<A5*>(a12.getA3()) == a12.getA5());
1965    assert(dynamic_cast<A5*>(a12.getA4()) == a12.getA5());
1966
1967    assert(dynamic_cast<A6*>(a12.getA1_3()) == a12.getA6());
1968    assert(dynamic_cast<A6*>(a12.getA1_4()) == a12.getA6());
1969    assert(dynamic_cast<A6*>(a12.getA1_6()) == a12.getA6());
1970    assert(dynamic_cast<A6*>(a12.getA1_9()) == a12.getA6());
1971    assert(dynamic_cast<A6*>(a12.getA2()) == a12.getA6());
1972    assert(dynamic_cast<A6*>(a12.getA3()) == a12.getA6());
1973    assert(dynamic_cast<A6*>(a12.getA4()) == a12.getA6());
1974    assert(dynamic_cast<A6*>(a12.getA5()) == a12.getA6());
1975
1976    assert(dynamic_cast<A7*>(a12.getA1_3()) == a12.getA7());
1977    assert(dynamic_cast<A7*>(a12.getA1_4()) == a12.getA7());
1978    assert(dynamic_cast<A7*>(a12.getA1_6()) == a12.getA7());
1979    assert(dynamic_cast<A7*>(a12.getA1_9()) == a12.getA7());
1980    assert(dynamic_cast<A7*>(a12.getA2()) == a12.getA7());
1981    assert(dynamic_cast<A7*>(a12.getA3()) == a12.getA7());
1982    assert(dynamic_cast<A7*>(a12.getA4()) == a12.getA7());
1983    assert(dynamic_cast<A7*>(a12.getA5()) == a12.getA7());
1984    assert(dynamic_cast<A7*>(a12.getA6()) == a12.getA7());
1985
1986    assert(dynamic_cast<A8*>(a12.getA1_3()) == a12.getA8());
1987    assert(dynamic_cast<A8*>(a12.getA1_4()) == a12.getA8());
1988    assert(dynamic_cast<A8*>(a12.getA1_6()) == a12.getA8());
1989    assert(dynamic_cast<A8*>(a12.getA1_9()) == a12.getA8());
1990    assert(dynamic_cast<A8*>(a12.getA2()) == a12.getA8());
1991    assert(dynamic_cast<A8*>(a12.getA3()) == a12.getA8());
1992    assert(dynamic_cast<A8*>(a12.getA4()) == a12.getA8());
1993    assert(dynamic_cast<A8*>(a12.getA5()) == a12.getA8());
1994    assert(dynamic_cast<A8*>(a12.getA6()) == a12.getA8());
1995    assert(dynamic_cast<A8*>(a12.getA7()) == a12.getA8());
1996
1997    assert(dynamic_cast<A9*>(a12.getA1_3()) == a12.getA9());
1998    assert(dynamic_cast<A9*>(a12.getA1_4()) == a12.getA9());
1999    assert(dynamic_cast<A9*>(a12.getA1_6()) == a12.getA9());
2000    assert(dynamic_cast<A9*>(a12.getA1_9()) == a12.getA9());
2001    assert(dynamic_cast<A9*>(a12.getA2()) == a12.getA9());
2002    assert(dynamic_cast<A9*>(a12.getA3()) == a12.getA9());
2003    assert(dynamic_cast<A9*>(a12.getA4()) == a12.getA9());
2004    assert(dynamic_cast<A9*>(a12.getA5()) == a12.getA9());
2005    assert(dynamic_cast<A9*>(a12.getA6()) == a12.getA9());
2006    assert(dynamic_cast<A9*>(a12.getA7()) == a12.getA9());
2007    assert(dynamic_cast<A9*>(a12.getA8()) == a12.getA9());
2008
2009    assert(dynamic_cast<A10*>(a12.getA1_3()) == a12.getA10());
2010    assert(dynamic_cast<A10*>(a12.getA1_4()) == a12.getA10());
2011    assert(dynamic_cast<A10*>(a12.getA1_6()) == a12.getA10());
2012    assert(dynamic_cast<A10*>(a12.getA1_9()) == a12.getA10());
2013    assert(dynamic_cast<A10*>(a12.getA2()) == a12.getA10());
2014    assert(dynamic_cast<A10*>(a12.getA3()) == a12.getA10());
2015    assert(dynamic_cast<A10*>(a12.getA4()) == a12.getA10());
2016    assert(dynamic_cast<A10*>(a12.getA5()) == a12.getA10());
2017    assert(dynamic_cast<A10*>(a12.getA6()) == a12.getA10());
2018    assert(dynamic_cast<A10*>(a12.getA7()) == a12.getA10());
2019    assert(dynamic_cast<A10*>(a12.getA8()) == a12.getA10());
2020    assert(dynamic_cast<A10*>(a12.getA9()) == a12.getA10());
2021
2022    assert(dynamic_cast<A11*>(a12.getA1_3()) == a12.getA11());
2023    assert(dynamic_cast<A11*>(a12.getA1_4()) == a12.getA11());
2024    assert(dynamic_cast<A11*>(a12.getA1_6()) == a12.getA11());
2025    assert(dynamic_cast<A11*>(a12.getA1_9()) == a12.getA11());
2026    assert(dynamic_cast<A11*>(a12.getA2()) == a12.getA11());
2027    assert(dynamic_cast<A11*>(a12.getA3()) == a12.getA11());
2028    assert(dynamic_cast<A11*>(a12.getA4()) == a12.getA11());
2029    assert(dynamic_cast<A11*>(a12.getA5()) == a12.getA11());
2030    assert(dynamic_cast<A11*>(a12.getA6()) == a12.getA11());
2031    assert(dynamic_cast<A11*>(a12.getA7()) == a12.getA11());
2032    assert(dynamic_cast<A11*>(a12.getA8()) == a12.getA11());
2033    assert(dynamic_cast<A11*>(a12.getA9()) == a12.getA11());
2034    assert(dynamic_cast<A11*>(a12.getA10()) == a12.getA11());
2035
2036    assert(dynamic_cast<A12*>(a12.getA1_3()) == a12.getA12());
2037    assert(dynamic_cast<A12*>(a12.getA1_4()) == a12.getA12());
2038    assert(dynamic_cast<A12*>(a12.getA1_6()) == a12.getA12());
2039    assert(dynamic_cast<A12*>(a12.getA1_9()) == a12.getA12());
2040    assert(dynamic_cast<A12*>(a12.getA2()) == a12.getA12());
2041    assert(dynamic_cast<A12*>(a12.getA3()) == a12.getA12());
2042    assert(dynamic_cast<A12*>(a12.getA4()) == a12.getA12());
2043    assert(dynamic_cast<A12*>(a12.getA5()) == a12.getA12());
2044    assert(dynamic_cast<A12*>(a12.getA6()) == a12.getA12());
2045    assert(dynamic_cast<A12*>(a12.getA7()) == a12.getA12());
2046    assert(dynamic_cast<A12*>(a12.getA8()) == a12.getA12());
2047    assert(dynamic_cast<A12*>(a12.getA9()) == a12.getA12());
2048    assert(dynamic_cast<A12*>(a12.getA10()) == a12.getA12());
2049    assert(dynamic_cast<A12*>(a12.getA11()) == a12.getA12());
2050
2051    assert(dynamic_cast<A3*>(a13.getA1_3()) == a13.getA3());
2052    assert(dynamic_cast<A3*>(a13.getA1_4()) == a13.getA3());
2053    assert(dynamic_cast<A3*>(a13.getA1_6()) == a13.getA3());
2054    assert(dynamic_cast<A3*>(a13.getA1_9()) == a13.getA3());
2055    assert(dynamic_cast<A3*>(a13.getA2()) == a13.getA3());
2056
2057    assert(dynamic_cast<A4*>(a13.getA1_3()) == a13.getA4());
2058    assert(dynamic_cast<A4*>(a13.getA1_4()) == a13.getA4());
2059    assert(dynamic_cast<A4*>(a13.getA1_6()) == a13.getA4());
2060    assert(dynamic_cast<A4*>(a13.getA1_9()) == a13.getA4());
2061    assert(dynamic_cast<A4*>(a13.getA2()) == a13.getA4());
2062    assert(dynamic_cast<A4*>(a13.getA3()) == a13.getA4());
2063
2064    assert(dynamic_cast<A5*>(a13.getA1_3()) == a13.getA5());
2065    assert(dynamic_cast<A5*>(a13.getA1_4()) == a13.getA5());
2066    assert(dynamic_cast<A5*>(a13.getA1_6()) == a13.getA5());
2067    assert(dynamic_cast<A5*>(a13.getA1_9()) == a13.getA5());
2068    assert(dynamic_cast<A5*>(a13.getA2()) == a13.getA5());
2069    assert(dynamic_cast<A5*>(a13.getA3()) == a13.getA5());
2070    assert(dynamic_cast<A5*>(a13.getA4()) == a13.getA5());
2071
2072    assert(dynamic_cast<A6*>(a13.getA1_3()) == a13.getA6());
2073    assert(dynamic_cast<A6*>(a13.getA1_4()) == a13.getA6());
2074    assert(dynamic_cast<A6*>(a13.getA1_6()) == a13.getA6());
2075    assert(dynamic_cast<A6*>(a13.getA1_9()) == a13.getA6());
2076    assert(dynamic_cast<A6*>(a13.getA2()) == a13.getA6());
2077    assert(dynamic_cast<A6*>(a13.getA3()) == a13.getA6());
2078    assert(dynamic_cast<A6*>(a13.getA4()) == a13.getA6());
2079    assert(dynamic_cast<A6*>(a13.getA5()) == a13.getA6());
2080
2081    assert(dynamic_cast<A7*>(a13.getA1_3()) == a13.getA7());
2082    assert(dynamic_cast<A7*>(a13.getA1_4()) == a13.getA7());
2083    assert(dynamic_cast<A7*>(a13.getA1_6()) == a13.getA7());
2084    assert(dynamic_cast<A7*>(a13.getA1_9()) == a13.getA7());
2085    assert(dynamic_cast<A7*>(a13.getA2()) == a13.getA7());
2086    assert(dynamic_cast<A7*>(a13.getA3()) == a13.getA7());
2087    assert(dynamic_cast<A7*>(a13.getA4()) == a13.getA7());
2088    assert(dynamic_cast<A7*>(a13.getA5()) == a13.getA7());
2089    assert(dynamic_cast<A7*>(a13.getA6()) == a13.getA7());
2090
2091    assert(dynamic_cast<A8*>(a13.getA1_3()) == a13.getA8());
2092    assert(dynamic_cast<A8*>(a13.getA1_4()) == a13.getA8());
2093    assert(dynamic_cast<A8*>(a13.getA1_6()) == a13.getA8());
2094    assert(dynamic_cast<A8*>(a13.getA1_9()) == a13.getA8());
2095    assert(dynamic_cast<A8*>(a13.getA2()) == a13.getA8());
2096    assert(dynamic_cast<A8*>(a13.getA3()) == a13.getA8());
2097    assert(dynamic_cast<A8*>(a13.getA4()) == a13.getA8());
2098    assert(dynamic_cast<A8*>(a13.getA5()) == a13.getA8());
2099    assert(dynamic_cast<A8*>(a13.getA6()) == a13.getA8());
2100    assert(dynamic_cast<A8*>(a13.getA7()) == a13.getA8());
2101
2102    assert(dynamic_cast<A9*>(a13.getA1_3()) == a13.getA9());
2103    assert(dynamic_cast<A9*>(a13.getA1_4()) == a13.getA9());
2104    assert(dynamic_cast<A9*>(a13.getA1_6()) == a13.getA9());
2105    assert(dynamic_cast<A9*>(a13.getA1_9()) == a13.getA9());
2106    assert(dynamic_cast<A9*>(a13.getA2()) == a13.getA9());
2107    assert(dynamic_cast<A9*>(a13.getA3()) == a13.getA9());
2108    assert(dynamic_cast<A9*>(a13.getA4()) == a13.getA9());
2109    assert(dynamic_cast<A9*>(a13.getA5()) == a13.getA9());
2110    assert(dynamic_cast<A9*>(a13.getA6()) == a13.getA9());
2111    assert(dynamic_cast<A9*>(a13.getA7()) == a13.getA9());
2112    assert(dynamic_cast<A9*>(a13.getA8()) == a13.getA9());
2113
2114    assert(dynamic_cast<A10*>(a13.getA1_3()) == a13.getA10());
2115    assert(dynamic_cast<A10*>(a13.getA1_4()) == a13.getA10());
2116    assert(dynamic_cast<A10*>(a13.getA1_6()) == a13.getA10());
2117    assert(dynamic_cast<A10*>(a13.getA1_9()) == a13.getA10());
2118    assert(dynamic_cast<A10*>(a13.getA2()) == a13.getA10());
2119    assert(dynamic_cast<A10*>(a13.getA3()) == a13.getA10());
2120    assert(dynamic_cast<A10*>(a13.getA4()) == a13.getA10());
2121    assert(dynamic_cast<A10*>(a13.getA5()) == a13.getA10());
2122    assert(dynamic_cast<A10*>(a13.getA6()) == a13.getA10());
2123    assert(dynamic_cast<A10*>(a13.getA7()) == a13.getA10());
2124    assert(dynamic_cast<A10*>(a13.getA8()) == a13.getA10());
2125    assert(dynamic_cast<A10*>(a13.getA9()) == a13.getA10());
2126
2127    assert(dynamic_cast<A11*>(a13.getA1_3()) == a13.getA11());
2128    assert(dynamic_cast<A11*>(a13.getA1_4()) == a13.getA11());
2129    assert(dynamic_cast<A11*>(a13.getA1_6()) == a13.getA11());
2130    assert(dynamic_cast<A11*>(a13.getA1_9()) == a13.getA11());
2131    assert(dynamic_cast<A11*>(a13.getA2()) == a13.getA11());
2132    assert(dynamic_cast<A11*>(a13.getA3()) == a13.getA11());
2133    assert(dynamic_cast<A11*>(a13.getA4()) == a13.getA11());
2134    assert(dynamic_cast<A11*>(a13.getA5()) == a13.getA11());
2135    assert(dynamic_cast<A11*>(a13.getA6()) == a13.getA11());
2136    assert(dynamic_cast<A11*>(a13.getA7()) == a13.getA11());
2137    assert(dynamic_cast<A11*>(a13.getA8()) == a13.getA11());
2138    assert(dynamic_cast<A11*>(a13.getA9()) == a13.getA11());
2139    assert(dynamic_cast<A11*>(a13.getA10()) == a13.getA11());
2140
2141    assert(dynamic_cast<A12*>(a13.getA1_3()) == a13.getA12());
2142    assert(dynamic_cast<A12*>(a13.getA1_4()) == a13.getA12());
2143    assert(dynamic_cast<A12*>(a13.getA1_6()) == a13.getA12());
2144    assert(dynamic_cast<A12*>(a13.getA1_9()) == a13.getA12());
2145    assert(dynamic_cast<A12*>(a13.getA2()) == a13.getA12());
2146    assert(dynamic_cast<A12*>(a13.getA3()) == a13.getA12());
2147    assert(dynamic_cast<A12*>(a13.getA4()) == a13.getA12());
2148    assert(dynamic_cast<A12*>(a13.getA5()) == a13.getA12());
2149    assert(dynamic_cast<A12*>(a13.getA6()) == a13.getA12());
2150    assert(dynamic_cast<A12*>(a13.getA7()) == a13.getA12());
2151    assert(dynamic_cast<A12*>(a13.getA8()) == a13.getA12());
2152    assert(dynamic_cast<A12*>(a13.getA9()) == a13.getA12());
2153    assert(dynamic_cast<A12*>(a13.getA10()) == a13.getA12());
2154    assert(dynamic_cast<A12*>(a13.getA11()) == a13.getA12());
2155
2156    assert(dynamic_cast<A13*>(a13.getA1_3()) == a13.getA13());
2157    assert(dynamic_cast<A13*>(a13.getA1_4()) == a13.getA13());
2158    assert(dynamic_cast<A13*>(a13.getA1_6()) == a13.getA13());
2159    assert(dynamic_cast<A13*>(a13.getA1_9()) == a13.getA13());
2160    assert(dynamic_cast<A13*>(a13.getA2()) == a13.getA13());
2161    assert(dynamic_cast<A13*>(a13.getA3()) == a13.getA13());
2162    assert(dynamic_cast<A13*>(a13.getA4()) == a13.getA13());
2163    assert(dynamic_cast<A13*>(a13.getA5()) == a13.getA13());
2164    assert(dynamic_cast<A13*>(a13.getA6()) == a13.getA13());
2165    assert(dynamic_cast<A13*>(a13.getA7()) == a13.getA13());
2166    assert(dynamic_cast<A13*>(a13.getA8()) == a13.getA13());
2167    assert(dynamic_cast<A13*>(a13.getA9()) == a13.getA13());
2168    assert(dynamic_cast<A13*>(a13.getA10()) == a13.getA13());
2169    assert(dynamic_cast<A13*>(a13.getA11()) == a13.getA13());
2170    assert(dynamic_cast<A13*>(a13.getA12()) == a13.getA13());
2171}
2172
2173}  // t3
2174
2175#include <chrono>
2176#include <iostream>
2177
2178int main()
2179{
2180    typedef std::chrono::high_resolution_clock Clock;
2181    typedef Clock::time_point time_point;
2182    typedef std::chrono::duration<double, std::micro> NS;
2183    time_point t0 = Clock::now();
2184    t1::test();
2185    t2::test();
2186    t3::test();
2187    time_point t1 = Clock::now();
2188    std::cout << NS(t1-t0).count() << " microseconds\n";
2189}
2190