Home | History | Annotate | Download | only in tests
      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 
     12 namespace t1
     13 {
     14 
     15 struct A1
     16 {
     17     char _[43981];
     18     virtual ~A1() {}
     19 
     20     A1* getA1() {return this;}
     21 };
     22 
     23 struct A2
     24 {
     25     char _[34981];
     26     virtual ~A2() {}
     27 
     28     A2* getA2() {return this;}
     29 };
     30 
     31 struct 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 
     43 struct 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 
     55 struct 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 
     70 struct 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 
     80 struct 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 
     98 struct 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 
    116 struct 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 
    126 struct 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 
    145 struct 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 
    167 struct 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 
    191 struct 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 
    215 void 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 
    733 namespace t2
    734 {
    735 
    736 struct A1
    737 {
    738     char _[43981];
    739     virtual ~A1() {}
    740 
    741     A1* getA1() {return this;}
    742 };
    743 
    744 struct A2
    745 {
    746     char _[34981];
    747     virtual ~A2() {}
    748 
    749     A2* getA2() {return this;}
    750 };
    751 
    752 struct 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 
    764 struct 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 
    776 struct 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 
    791 struct 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 
    801 struct 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 
    819 struct 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 
    837 struct 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 
    847 struct 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 
    866 struct 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 
    888 struct 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 
    912 struct 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 
    936 void 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 
   1454 namespace t3
   1455 {
   1456 
   1457 struct A1
   1458 {
   1459     char _[43981];
   1460     virtual ~A1() {}
   1461 
   1462     A1* getA1() {return this;}
   1463 };
   1464 
   1465 struct A2
   1466 {
   1467     char _[34981];
   1468     virtual ~A2() {}
   1469 
   1470     A2* getA2() {return this;}
   1471 };
   1472 
   1473 struct 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 
   1485 struct 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 
   1497 struct 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 
   1512 struct 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 
   1522 struct 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 
   1540 struct 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 
   1558 struct 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 
   1568 struct 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 
   1587 struct 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 
   1609 struct 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 
   1633 struct 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 
   1657 void 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 
   2178 int 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