168fd743cd3278364c9ec13da437586d989641265Howard Hinnant//===------------------------- dynamic_cast5.cpp --------------------------===//
268fd743cd3278364c9ec13da437586d989641265Howard Hinnant//
368fd743cd3278364c9ec13da437586d989641265Howard Hinnant//                     The LLVM Compiler Infrastructure
468fd743cd3278364c9ec13da437586d989641265Howard Hinnant//
568fd743cd3278364c9ec13da437586d989641265Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
668fd743cd3278364c9ec13da437586d989641265Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
768fd743cd3278364c9ec13da437586d989641265Howard Hinnant//
868fd743cd3278364c9ec13da437586d989641265Howard Hinnant//===----------------------------------------------------------------------===//
968fd743cd3278364c9ec13da437586d989641265Howard Hinnant
1068fd743cd3278364c9ec13da437586d989641265Howard Hinnant#include <cassert>
1168fd743cd3278364c9ec13da437586d989641265Howard Hinnant
1268fd743cd3278364c9ec13da437586d989641265Howard Hinnantnamespace t1
1368fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
1468fd743cd3278364c9ec13da437586d989641265Howard Hinnant
1568fd743cd3278364c9ec13da437586d989641265Howard Hinnantstruct A1
1668fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
1768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    char _[43981];
1868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    virtual ~A1() {}
1968fd743cd3278364c9ec13da437586d989641265Howard Hinnant
2068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A1* getA1() {return this;}
2168fd743cd3278364c9ec13da437586d989641265Howard Hinnant};
2268fd743cd3278364c9ec13da437586d989641265Howard Hinnant
2368fd743cd3278364c9ec13da437586d989641265Howard Hinnantstruct A2
2468fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
2568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    char _[34981];
2668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    virtual ~A2() {}
2768fd743cd3278364c9ec13da437586d989641265Howard Hinnant
2868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A2* getA2() {return this;}
2968fd743cd3278364c9ec13da437586d989641265Howard Hinnant};
3068fd743cd3278364c9ec13da437586d989641265Howard Hinnant
3168fd743cd3278364c9ec13da437586d989641265Howard Hinnantstruct A3
3268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    : public virtual A1,
3368fd743cd3278364c9ec13da437586d989641265Howard Hinnant      private A2
3468fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
3568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    char _[93481];
3668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    virtual ~A3() {}
3768fd743cd3278364c9ec13da437586d989641265Howard Hinnant
3868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A1* getA1() {return A1::getA1();}
3968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A2* getA2() {return A2::getA2();}
4068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A3* getA3() {return this;}
4168fd743cd3278364c9ec13da437586d989641265Howard Hinnant};
4268fd743cd3278364c9ec13da437586d989641265Howard Hinnant
4368fd743cd3278364c9ec13da437586d989641265Howard Hinnantstruct A4
4468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    : public A3,
4568fd743cd3278364c9ec13da437586d989641265Howard Hinnant      public A2
4668fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
4768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    char _[13489];
4868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    virtual ~A4() {}
4968fd743cd3278364c9ec13da437586d989641265Howard Hinnant
5068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    t1::A1* getA1() {return A3::getA1();}
5168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A2* getA2() {return A3::getA2();}
5268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A3* getA3() {return A3::getA3();}
5368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A4* getA4() {return this;}
5468fd743cd3278364c9ec13da437586d989641265Howard Hinnant};
5568fd743cd3278364c9ec13da437586d989641265Howard Hinnant
5668fd743cd3278364c9ec13da437586d989641265Howard Hinnantstruct A5
5768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    : public A4,
5868fd743cd3278364c9ec13da437586d989641265Howard Hinnant      public A3
5968fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
6068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    char _[13489];
6168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    virtual ~A5() {}
6268fd743cd3278364c9ec13da437586d989641265Howard Hinnant
6368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    t1::A1* getA1() {return A4::getA1();}
6468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A2* getA2() {return A4::getA2();}
6568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A3* getA3() {return A4::getA3();}
6668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A4* getA4() {return A4::getA4();}
6768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A5* getA5() {return this;}
6868fd743cd3278364c9ec13da437586d989641265Howard Hinnant};
6968fd743cd3278364c9ec13da437586d989641265Howard Hinnant
7068fd743cd3278364c9ec13da437586d989641265Howard Hinnantvoid test()
7168fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
7268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A1 a1;
7368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A2 a2;
7468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A3 a3;
7568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A4 a4;
7668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A5 a5;
7768fd743cd3278364c9ec13da437586d989641265Howard Hinnant
7868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
7968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
8068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
8168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == 0);
8268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
8368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
8468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a4.getA2()) == 0);
8568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a4.getA3()) == a4.getA1());
8668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
8768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a5.getA1()) == a5.getA1());
8868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a5.getA2()) == 0);
8968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA1());
9068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA1());
9168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a5.getA5()) == a5.getA1());
9268fd743cd3278364c9ec13da437586d989641265Howard Hinnant
9368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
9468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
9568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
9668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
9768fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A2*>(a3.getA3()) == 0);  // cast to private base
9868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a4.getA1()) == 0);
9968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
10068fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A2*>(a4.getA3()) == 0);  // cast to private base
10168fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A2*>(a4.getA4()) == 0);  // cast to ambiguous base
10268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a5.getA1()) == 0);
10368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
10468fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A2*>(a5.getA3()) == 0);  // cast to private base
10568fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A2*>(a5.getA4()) == 0);  // cast to ambiguous base
10668fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A2*>(a5.getA5()) == 0);  // cast to ambiguous base
10768fd743cd3278364c9ec13da437586d989641265Howard Hinnant
10868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
10968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
11068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
11168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
11268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
11368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a4.getA1()) == a4.getA3());
11468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
11568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a4.getA3()) == a4.getA3());
11668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a4.getA4()) == a4.getA3());
11768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a5.getA1()) == 0);
11868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a5.getA2()) == 0);
11968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
12068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
12168fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A3*>(a5.getA5()) == 0);  // cast to ambiguous base
12268fd743cd3278364c9ec13da437586d989641265Howard Hinnant
12368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a1.getA1()) == 0);
12468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a2.getA2()) == 0);
12568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a3.getA1()) == 0);
12668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a3.getA2()) == 0);
12768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a3.getA3()) == 0);
12868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
12968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a4.getA2()) == 0);
13068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a4.getA3()) == a4.getA4());
13168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
13268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a5.getA1()) == a5.getA4());
13368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a5.getA2()) == 0);
13468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
13568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
13668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
13768fd743cd3278364c9ec13da437586d989641265Howard Hinnant
13868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a1.getA1()) == 0);
13968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a2.getA2()) == 0);
14068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a3.getA1()) == 0);
14168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a3.getA2()) == 0);
14268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a3.getA3()) == 0);
14368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a4.getA1()) == 0);
14468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a4.getA2()) == 0);
14568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a4.getA3()) == 0);
14668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a4.getA4()) == 0);
14768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a5.getA1()) == a5.getA5());
14868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a5.getA2()) == 0);
14968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
15068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
15168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
15268fd743cd3278364c9ec13da437586d989641265Howard Hinnant}
15368fd743cd3278364c9ec13da437586d989641265Howard Hinnant
15468fd743cd3278364c9ec13da437586d989641265Howard Hinnant}  // t1
15568fd743cd3278364c9ec13da437586d989641265Howard Hinnant
15668fd743cd3278364c9ec13da437586d989641265Howard Hinnantnamespace t2
15768fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
15868fd743cd3278364c9ec13da437586d989641265Howard Hinnant
15968fd743cd3278364c9ec13da437586d989641265Howard Hinnantstruct A1
16068fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
16168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    char _[43981];
16268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    virtual ~A1() {}
16368fd743cd3278364c9ec13da437586d989641265Howard Hinnant
16468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A1* getA1() {return this;}
16568fd743cd3278364c9ec13da437586d989641265Howard Hinnant};
16668fd743cd3278364c9ec13da437586d989641265Howard Hinnant
16768fd743cd3278364c9ec13da437586d989641265Howard Hinnantstruct A2
16868fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
16968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    char _[34981];
17068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    virtual ~A2() {}
17168fd743cd3278364c9ec13da437586d989641265Howard Hinnant
17268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A2* getA2() {return this;}
17368fd743cd3278364c9ec13da437586d989641265Howard Hinnant};
17468fd743cd3278364c9ec13da437586d989641265Howard Hinnant
17568fd743cd3278364c9ec13da437586d989641265Howard Hinnantstruct A3
17668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    : public virtual A1,
17768fd743cd3278364c9ec13da437586d989641265Howard Hinnant      public A2
17868fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
17968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    char _[93481];
18068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    virtual ~A3() {}
18168fd743cd3278364c9ec13da437586d989641265Howard Hinnant
18268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A1* getA1() {return A1::getA1();}
18368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A2* getA2() {return A2::getA2();}
18468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A3* getA3() {return this;}
18568fd743cd3278364c9ec13da437586d989641265Howard Hinnant};
18668fd743cd3278364c9ec13da437586d989641265Howard Hinnant
18768fd743cd3278364c9ec13da437586d989641265Howard Hinnantstruct A4
18868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    : public A3,
18968fd743cd3278364c9ec13da437586d989641265Howard Hinnant      public A2
19068fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
19168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    char _[13489];
19268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    virtual ~A4() {}
19368fd743cd3278364c9ec13da437586d989641265Howard Hinnant
19468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    t2::A1* getA1() {return A3::getA1();}
19568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A2* getA2() {return A3::getA2();}
19668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A3* getA3() {return A3::getA3();}
19768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A4* getA4() {return this;}
19868fd743cd3278364c9ec13da437586d989641265Howard Hinnant};
19968fd743cd3278364c9ec13da437586d989641265Howard Hinnant
20068fd743cd3278364c9ec13da437586d989641265Howard Hinnantstruct A5
20168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    : public A4,
20268fd743cd3278364c9ec13da437586d989641265Howard Hinnant      public A3
20368fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
20468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    char _[13489];
20568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    virtual ~A5() {}
20668fd743cd3278364c9ec13da437586d989641265Howard Hinnant
20768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    t2::A1* getA1() {return A4::getA1();}
20868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A2* getA2() {return A4::getA2();}
20968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A3* getA3() {return A4::getA3();}
21068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A4* getA4() {return A4::getA4();}
21168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A5* getA5() {return this;}
21268fd743cd3278364c9ec13da437586d989641265Howard Hinnant};
21368fd743cd3278364c9ec13da437586d989641265Howard Hinnant
21468fd743cd3278364c9ec13da437586d989641265Howard Hinnantvoid test()
21568fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
21668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A1 a1;
21768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A2 a2;
21868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A3 a3;
21968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A4 a4;
22068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    A5 a5;
22168fd743cd3278364c9ec13da437586d989641265Howard Hinnant
22268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
22368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
22468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
22568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
22668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
22768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
22868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
22968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a4.getA3()) == a4.getA1());
23068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
23168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a5.getA1()) == a5.getA1());
23268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a5.getA2()) == a5.getA1());
23368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA1());
23468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA1());
23568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A1*>(a5.getA5()) == a5.getA1());
23668fd743cd3278364c9ec13da437586d989641265Howard Hinnant
23768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
23868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
23968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
24068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
24168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
24268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a4.getA1()) == 0);
24368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
24468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a4.getA3()) == a4.getA2());
24568fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A2*>(a4.getA4()) == 0);  // cast to ambiguous base
24668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a5.getA1()) == 0);
24768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
24868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
24968fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A2*>(a5.getA4()) == 0);  // cast to ambiguous base
25068fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A2*>(a5.getA5()) == 0);  // cast to ambiguous base
25168fd743cd3278364c9ec13da437586d989641265Howard Hinnant
25268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
25368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
25468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
25568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
25668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
25768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a4.getA1()) == a4.getA3());
25868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a4.getA2()) == a4.getA3());
25968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a4.getA3()) == a4.getA3());
26068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a4.getA4()) == a4.getA3());
26168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a5.getA1()) == 0);
26268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
26368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
26468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
26568fd743cd3278364c9ec13da437586d989641265Howard Hinnant//    assert(dynamic_cast<A3*>(a5.getA5()) == 0);  // cast to ambiguous base
26668fd743cd3278364c9ec13da437586d989641265Howard Hinnant
26768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a1.getA1()) == 0);
26868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a2.getA2()) == 0);
26968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a3.getA1()) == 0);
27068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a3.getA2()) == 0);
27168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a3.getA3()) == 0);
27268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
27368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
27468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a4.getA3()) == a4.getA4());
27568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
27668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a5.getA1()) == a5.getA4());
27768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
27868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
27968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
28068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
28168fd743cd3278364c9ec13da437586d989641265Howard Hinnant
28268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a1.getA1()) == 0);
28368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a2.getA2()) == 0);
28468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a3.getA1()) == 0);
28568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a3.getA2()) == 0);
28668fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a3.getA3()) == 0);
28768fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a4.getA1()) == 0);
28868fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a4.getA2()) == 0);
28968fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a4.getA3()) == 0);
29068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a4.getA4()) == 0);
29168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a5.getA1()) == a5.getA5());
29268fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
29368fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
29468fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
29568fd743cd3278364c9ec13da437586d989641265Howard Hinnant    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
29668fd743cd3278364c9ec13da437586d989641265Howard Hinnant}
29768fd743cd3278364c9ec13da437586d989641265Howard Hinnant
29868fd743cd3278364c9ec13da437586d989641265Howard Hinnant}  // t2
29968fd743cd3278364c9ec13da437586d989641265Howard Hinnant
3001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantnamespace t3
3011309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
3021309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3031309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A1
3041309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
3051309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[43981];
3061309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A1() {}
3071309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3081309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return this;}
3091309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
3101309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3111309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A2
3121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
3131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[34981];
3141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A2() {}
3151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return this;}
3171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
3181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3191309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A3
3201309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
3211309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
3221309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
3231309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[93481];
3241309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A3() {}
3251309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3261309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
3271309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
3281309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return this;}
3291309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
3301309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3311309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A4
3321309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
3331309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
3341309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
3351309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[13489];
3361309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A4() {}
3371309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3381309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
3391309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
3401309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return this;}
3411309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
3421309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3431309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A5
3441309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A3,
3451309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public A4
3461309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
3471309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[41389];
3481309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A5() {}
3491309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3501309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA14() {return A4::getA1();}
3511309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA13() {return A3::getA1();}
3521309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A4::getA2();}
3531309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return A3::getA3();}
3541309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return A4::getA4();}
3551309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5* getA5() {return this;}
3561309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
3571309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3581309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantvoid test()
3591309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
3601309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1 a1;
3611309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2 a2;
3621309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3 a3;
3631309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4 a4;
3641309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5 a5;
3651309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3661309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
3671309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
3681309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
3691309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
3701309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
3711309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
3721309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
3731309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
3741309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
3751309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
3761309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA2()) == 0);
3771309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
3781309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
3791309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3801309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
3811309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
3821309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
3831309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
3841309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
3851309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());
3861309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
3871309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
3881309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());
3891309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());
3901309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
3911309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
3921309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
3931309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
3941309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
3951309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
3961309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
3971309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
3981309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
3991309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
4001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA1()) == 0);
4011309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
4021309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA4()) == 0);
4031309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());
4041309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
4051309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
4061309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
4071309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
4081309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
4091309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4101309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a1.getA1()) == 0);
4111309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a2.getA2()) == 0);
4121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA1()) == 0);
4131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA2()) == 0);
4141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA3()) == 0);
4151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
4161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
4171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
4181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
4191309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());
4201309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
4211309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
4221309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
4231309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
4241309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4251309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a1.getA1()) == 0);
4261309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a2.getA2()) == 0);
4271309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA1()) == 0);
4281309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA2()) == 0);
4291309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA3()) == 0);
4301309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA1()) == 0);
4311309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA2()) == 0);
4321309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA4()) == 0);
4331309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());
4341309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());
4351309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
4361309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
4371309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
4381309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
4391309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}
4401309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4411309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}  // t3
4421309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4431309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantnamespace t4
4441309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
4451309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4461309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A1
4471309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
4481309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[43981];
4491309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A1() {}
4501309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4511309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return this;}
4521309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
4531309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4541309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A2
4551309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
4561309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[34981];
4571309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A2() {}
4581309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4591309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return this;}
4601309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
4611309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4621309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A3
4631309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : protected A1,
4641309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
4651309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
4661309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[93481];
4671309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A3() {}
4681309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4691309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
4701309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
4711309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return this;}
4721309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
4731309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4741309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A4
4751309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
4761309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
4771309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
4781309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[13489];
4791309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A4() {}
4801309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4811309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
4821309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
4831309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return this;}
4841309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
4851309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4861309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A5
4871309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A3,
4881309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public A4
4891309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
4901309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[41389];
4911309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A5() {}
4921309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
4931309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA14() {return A4::getA1();}
4941309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA13() {return A3::getA1();}
4951309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A4::getA2();}
4961309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return A3::getA3();}
4971309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return A4::getA4();}
4981309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5* getA5() {return this;}
4991309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
5001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5011309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantvoid test()
5021309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
5031309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1 a1;
5041309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2 a2;
5051309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3 a3;
5061309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4 a4;
5071309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5 a5;
5081309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5091309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
5101309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
5111309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
5121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == 0);
5131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant//    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());  // cast to protected base
5141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
5151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
5161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
5171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
5181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
5191309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA2()) == 0);
5201309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant//    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());  // cast to protected base
5211309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
5221309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5231309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
5241309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
5251309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
5261309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
5271309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
5281309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());
5291309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
5301309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
5311309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());
5321309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA13()) == 0);
5331309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
5341309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
5351309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
5361309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
5371309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5381309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
5391309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
5401309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
5411309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
5421309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
5431309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA1()) == 0);
5441309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
5451309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA4()) == 0);
5461309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());
5471309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA13()) == 0);
5481309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
5491309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
5501309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
5511309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
5521309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5531309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a1.getA1()) == 0);
5541309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a2.getA2()) == 0);
5551309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA1()) == 0);
5561309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA2()) == 0);
5571309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA3()) == 0);
5581309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
5591309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
5601309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
5611309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
5621309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA13()) == 0);
5631309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
5641309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
5651309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
5661309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
5671309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5681309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a1.getA1()) == 0);
5691309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a2.getA2()) == 0);
5701309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA1()) == 0);
5711309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA2()) == 0);
5721309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA3()) == 0);
5731309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA1()) == 0);
5741309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA2()) == 0);
5751309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA4()) == 0);
5761309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());
5771309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA13()) == 0);
5781309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
5791309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
5801309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
5811309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
5821309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}
5831309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5841309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}  // t4
5851309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5861309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantnamespace t5
5871309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
5881309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5891309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A1
5901309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
5911309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[43981];
5921309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A1() {}
5931309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5941309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return this;}
5951309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
5961309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
5971309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A2
5981309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
5991309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[34981];
6001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A2() {}
6011309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6021309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return this;}
6031309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
6041309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6051309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A3
6061309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
6071309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      protected virtual A2
6081309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
6091309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[93481];
6101309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A3() {}
6111309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
6131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
6141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return this;}
6151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
6161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A4
6181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
6191309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
6201309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
6211309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[13489];
6221309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A4() {}
6231309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6241309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
6251309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
6261309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return this;}
6271309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
6281309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6291309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A5
6301309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A3,
6311309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public A4
6321309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
6331309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[41389];
6341309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A5() {}
6351309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6361309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA14() {return A4::getA1();}
6371309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA13() {return A3::getA1();}
6381309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A4::getA2();}
6391309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return A3::getA3();}
6401309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return A4::getA4();}
6411309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5* getA5() {return this;}
6421309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
6431309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6441309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantvoid test()
6451309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
6461309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1 a1;
6471309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2 a2;
6481309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3 a3;
6491309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4 a4;
6501309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5 a5;
6511309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6521309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
6531309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
6541309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
6551309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == 0);
6561309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
6571309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
6581309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
6591309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
6601309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
6611309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
6621309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA2()) == 0);
6631309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
6641309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
6651309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6661309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
6671309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
6681309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
6691309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
6701309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant//    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());  // cast to protected base
6711309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());
6721309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
6731309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
6741309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());
6751309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());
6761309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
6771309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant//    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());  // cast to protected base
6781309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
6791309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
6801309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6811309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
6821309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
6831309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
6841309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
6851309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
6861309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA1()) == 0);
6871309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
6881309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA4()) == 0);
6891309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());
6901309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
6911309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
6921309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
6931309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
6941309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
6951309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
6961309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a1.getA1()) == 0);
6971309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a2.getA2()) == 0);
6981309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA1()) == 0);
6991309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA2()) == 0);
7001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA3()) == 0);
7011309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
7021309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
7031309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
7041309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
7051309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());
7061309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
7071309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
7081309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
7091309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
7101309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7111309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a1.getA1()) == 0);
7121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a2.getA2()) == 0);
7131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA1()) == 0);
7141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA2()) == 0);
7151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA3()) == 0);
7161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA1()) == 0);
7171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA2()) == 0);
7181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA4()) == 0);
7191309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());
7201309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());
7211309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
7221309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
7231309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
7241309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
7251309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}
7261309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7271309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}  // t5
7281309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7291309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantnamespace t6
7301309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
7311309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7321309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A1
7331309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
7341309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[43981];
7351309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A1() {}
7361309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7371309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return this;}
7381309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
7391309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7401309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A2
7411309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
7421309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[34981];
7431309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A2() {}
7441309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7451309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return this;}
7461309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
7471309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7481309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A3
7491309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
7501309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
7511309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
7521309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[93481];
7531309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A3() {}
7541309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7551309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
7561309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
7571309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return this;}
7581309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
7591309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7601309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A4
7611309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : protected A1,
7621309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
7631309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
7641309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[13489];
7651309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A4() {}
7661309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7671309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
7681309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
7691309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return this;}
7701309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
7711309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7721309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A5
7731309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A3,
7741309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public A4
7751309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
7761309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[41389];
7771309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A5() {}
7781309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7791309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA14() {return A4::getA1();}
7801309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA13() {return A3::getA1();}
7811309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A4::getA2();}
7821309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return A3::getA3();}
7831309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return A4::getA4();}
7841309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5* getA5() {return this;}
7851309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
7861309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7871309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantvoid test()
7881309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
7891309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1 a1;
7901309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2 a2;
7911309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3 a3;
7921309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4 a4;
7931309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5 a5;
7941309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
7951309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
7961309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
7971309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
7981309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
7991309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
8001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
8011309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA2()) == 0);
8021309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant//    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());  // cast to protected base
8031309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
8041309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
8051309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA2()) == 0);
8061309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
8071309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant//    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());  // cast to protected base
8081309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8091309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
8101309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
8111309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
8121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
8131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
8141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA1()) == 0);
8151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
8161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
8171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA14()) == 0);
8181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());
8191309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
8201309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
8211309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
8221309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
8231309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8241309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
8251309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
8261309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
8271309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
8281309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
8291309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA1()) == 0);
8301309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
8311309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA4()) == 0);
8321309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA14()) == 0);
8331309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
8341309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
8351309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
8361309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
8371309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
8381309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8391309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a1.getA1()) == 0);
8401309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a2.getA2()) == 0);
8411309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA1()) == 0);
8421309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA2()) == 0);
8431309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA3()) == 0);
8441309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA1()) == 0);
8451309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
8461309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
8471309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA14()) == 0);
8481309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());
8491309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
8501309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
8511309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
8521309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
8531309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8541309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a1.getA1()) == 0);
8551309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a2.getA2()) == 0);
8561309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA1()) == 0);
8571309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA2()) == 0);
8581309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA3()) == 0);
8591309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA1()) == 0);
8601309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA2()) == 0);
8611309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA4()) == 0);
8621309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA14()) == 0);
8631309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());
8641309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
8651309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
8661309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
8671309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
8681309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}
8691309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8701309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}  // t6
8711309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8721309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantnamespace t7
8731309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
8741309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8751309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A1
8761309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
8771309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[43981];
8781309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A1() {}
8791309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8801309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return this;}
8811309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
8821309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8831309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A2
8841309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
8851309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[34981];
8861309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A2() {}
8871309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8881309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return this;}
8891309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
8901309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8911309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A3
8921309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
8931309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
8941309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
8951309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[93481];
8961309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A3() {}
8971309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
8981309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
8991309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
9001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return this;}
9011309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
9021309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
9031309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A4
9041309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
9051309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      protected virtual A2
9061309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
9071309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[13489];
9081309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A4() {}
9091309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
9101309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
9111309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
9121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return this;}
9131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
9141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
9151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A5
9161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A3,
9171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public A4
9181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
9191309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[41389];
9201309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A5() {}
9211309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
9221309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA14() {return A4::getA1();}
9231309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA13() {return A3::getA1();}
9241309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A4::getA2();}
9251309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return A3::getA3();}
9261309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return A4::getA4();}
9271309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5* getA5() {return this;}
9281309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
9291309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
9301309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantvoid test()
9311309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
9321309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1 a1;
9331309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2 a2;
9341309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3 a3;
9351309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4 a4;
9361309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5 a5;
9371309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
9381309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
9391309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
9401309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
9411309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
9421309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
9431309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
9441309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA2()) == 0);
9451309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
9461309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
9471309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
9481309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA2()) == 0);
9491309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
9501309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
9511309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
9521309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
9531309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
9541309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
9551309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
9561309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
9571309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA1()) == 0);
9581309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
9591309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant//    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());  // cast to protected base
9601309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());
9611309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());
9621309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
9631309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
9641309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant//    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());  // cast to protected base
9651309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
9661309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
9671309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
9681309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
9691309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
9701309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
9711309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
9721309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA1()) == 0);
9731309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
9741309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA4()) == 0);
9751309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA14()) == a5.getA3());
9761309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
9771309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
9781309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
9791309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA4()) == a5.getA3());
9801309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
9811309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
9821309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a1.getA1()) == 0);
9831309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a2.getA2()) == 0);
9841309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA1()) == 0);
9851309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA2()) == 0);
9861309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA3()) == 0);
9871309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
9881309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA2()) == 0);
9891309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
9901309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
9911309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA13()) == a5.getA4());
9921309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
9931309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA3()) == a5.getA4());
9941309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
9951309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
9961309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
9971309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a1.getA1()) == 0);
9981309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a2.getA2()) == 0);
9991309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA1()) == 0);
10001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA2()) == 0);
10011309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA3()) == 0);
10021309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA1()) == 0);
10031309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA2()) == 0);
10041309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA4()) == 0);
10051309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());
10061309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());
10071309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
10081309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
10091309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
10101309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
10111309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}
10121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}  // t7
10141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantnamespace t8
10161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
10171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A1
10191309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
10201309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[43981];
10211309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A1() {}
10221309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10231309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return this;}
10241309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
10251309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10261309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A2
10271309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
10281309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[34981];
10291309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A2() {}
10301309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10311309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return this;}
10321309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
10331309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10341309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A3
10351309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
10361309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
10371309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
10381309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[93481];
10391309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A3() {}
10401309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10411309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
10421309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
10431309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return this;}
10441309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
10451309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10461309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A4
10471309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
10481309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
10491309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
10501309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[13489];
10511309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A4() {}
10521309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10531309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
10541309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
10551309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return this;}
10561309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
10571309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10581309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A5
10591309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : protected A3,
10601309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public A4
10611309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
10621309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[41389];
10631309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A5() {}
10641309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10651309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA14() {return A4::getA1();}
10661309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA13() {return A3::getA1();}
10671309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A4::getA2();}
10681309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return A3::getA3();}
10691309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return A4::getA4();}
10701309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5* getA5() {return this;}
10711309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
10721309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10731309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantvoid test()
10741309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
10751309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1 a1;
10761309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2 a2;
10771309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3 a3;
10781309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4 a4;
10791309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5 a5;
10801309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10811309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
10821309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
10831309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
10841309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
10851309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
10861309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
10871309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
10881309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
10891309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
10901309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
10911309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA2()) == 0);
10921309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
10931309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
10941309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
10951309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
10961309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
10971309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
10981309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
10991309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
11001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());
11011309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
11021309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
11031309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA14()) == a5.getA2());
11041309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA13()) == 0);
11051309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
11061309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
11071309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
11081309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
11091309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11101309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
11111309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
11121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
11131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
11141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
11151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA1()) == 0);
11161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
11171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA4()) == 0);
11181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA14()) == 0);
11191309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
11201309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
11211309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
11221309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA4()) == 0);
11231309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant//    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());  // cast to protected base
11241309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11251309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a1.getA1()) == 0);
11261309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a2.getA2()) == 0);
11271309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA1()) == 0);
11281309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA2()) == 0);
11291309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA3()) == 0);
11301309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
11311309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
11321309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
11331309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
11341309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA13()) == 0);
11351309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
11361309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA3()) == 0);
11371309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
11381309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());
11391309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11401309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a1.getA1()) == 0);
11411309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a2.getA2()) == 0);
11421309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA1()) == 0);
11431309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA2()) == 0);
11441309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA3()) == 0);
11451309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA1()) == 0);
11461309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA2()) == 0);
11471309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA4()) == 0);
11481309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA14()) == a5.getA5());
11491309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA13()) == 0);
11501309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
11511309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA3()) == 0);
11521309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA4()) == a5.getA5());
11531309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
11541309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}
11551309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11561309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}  // t8
11571309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11581309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantnamespace t9
11591309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
11601309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11611309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A1
11621309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
11631309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[43981];
11641309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A1() {}
11651309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11661309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return this;}
11671309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
11681309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11691309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A2
11701309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
11711309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[34981];
11721309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A2() {}
11731309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11741309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return this;}
11751309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
11761309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11771309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A3
11781309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
11791309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
11801309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
11811309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[93481];
11821309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A3() {}
11831309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11841309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
11851309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
11861309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return this;}
11871309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
11881309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11891309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A4
11901309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A1,
11911309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      public virtual A2
11921309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
11931309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[13489];
11941309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A4() {}
11951309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
11961309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA1() {return A1::getA1();}
11971309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A2::getA2();}
11981309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return this;}
11991309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
12001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
12011309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantstruct A5
12021309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    : public A3,
12031309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant      protected A4
12041309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
12051309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    char _[41389];
12061309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    virtual ~A5() {}
12071309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
12081309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA14() {return A4::getA1();}
12091309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1* getA13() {return A3::getA1();}
12101309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2* getA2() {return A4::getA2();}
12111309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3* getA3() {return A3::getA3();}
12121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4* getA4() {return A4::getA4();}
12131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5* getA5() {return this;}
12141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant};
12151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
12161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnantvoid test()
12171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant{
12181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A1 a1;
12191309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A2 a2;
12201309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A3 a3;
12211309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A4 a4;
12221309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    A5 a5;
12231309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
12241309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
12251309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
12261309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
12271309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
12281309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
12291309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA1()) == a4.getA1());
12301309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA2()) == a4.getA1());
12311309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a4.getA4()) == a4.getA1());
12321309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA14()) == a5.getA14());
12331309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA13()) == a5.getA13());
12341309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA2()) == 0);
12351309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA3()) == a5.getA13());
12361309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A1*>(a5.getA4()) == a5.getA14());
12371309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
12381309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
12391309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
12401309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
12411309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
12421309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
12431309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA1()) == a4.getA2());
12441309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA2()) == a4.getA2());
12451309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a4.getA4()) == a4.getA2());
12461309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA14()) == 0);
12471309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA13()) == a5.getA2());
12481309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA2()) == a5.getA2());
12491309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA3()) == a5.getA2());
12501309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA4()) == a5.getA2());
12511309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A2*>(a5.getA5()) == a5.getA2());
12521309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
12531309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
12541309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
12551309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
12561309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
12571309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
12581309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA1()) == 0);
12591309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA2()) == 0);
12601309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a4.getA4()) == 0);
12611309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA14()) == 0);
12621309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA13()) == a5.getA3());
12631309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA2()) == a5.getA3());
12641309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA3()) == a5.getA3());
12651309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA4()) == 0);
12661309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A3*>(a5.getA5()) == a5.getA3());
12671309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
12681309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a1.getA1()) == 0);
12691309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a2.getA2()) == 0);
12701309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA1()) == 0);
12711309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA2()) == 0);
12721309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a3.getA3()) == 0);
12731309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA1()) == a4.getA4());
12741309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA2()) == a4.getA4());
12751309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a4.getA4()) == a4.getA4());
12761309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA14()) == a5.getA4());
12771309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA13()) == 0);
12781309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA2()) == a5.getA4());
12791309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA3()) == 0);
12801309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A4*>(a5.getA4()) == a5.getA4());
12811309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant//    assert(dynamic_cast<A4*>(a5.getA5()) == a5.getA4());  // cast to protected base
12821309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
12831309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a1.getA1()) == 0);
12841309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a2.getA2()) == 0);
12851309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA1()) == 0);
12861309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA2()) == 0);
12871309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a3.getA3()) == 0);
12881309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA1()) == 0);
12891309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA2()) == 0);
12901309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a4.getA4()) == 0);
12911309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA14()) == 0);
12921309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA13()) == a5.getA5());
12931309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA2()) == a5.getA5());
12941309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA3()) == a5.getA5());
12951309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA4()) == 0);
12961309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    assert(dynamic_cast<A5*>(a5.getA5()) == a5.getA5());
12971309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}
12981309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
12991309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant}  // t9
13001309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant
1301cc614df38c199d9781a6dea123e714970e82711fHoward Hinnant#include <chrono>
1302cc614df38c199d9781a6dea123e714970e82711fHoward Hinnant#include <iostream>
1303cc614df38c199d9781a6dea123e714970e82711fHoward Hinnant
130468fd743cd3278364c9ec13da437586d989641265Howard Hinnantint main()
130568fd743cd3278364c9ec13da437586d989641265Howard Hinnant{
1306cc614df38c199d9781a6dea123e714970e82711fHoward Hinnant    typedef std::chrono::high_resolution_clock Clock;
1307cc614df38c199d9781a6dea123e714970e82711fHoward Hinnant    typedef Clock::time_point time_point;
1308cc614df38c199d9781a6dea123e714970e82711fHoward Hinnant    typedef std::chrono::duration<double, std::micro> NS;
1309cc614df38c199d9781a6dea123e714970e82711fHoward Hinnant    time_point t0 = Clock::now();
131068fd743cd3278364c9ec13da437586d989641265Howard Hinnant    t1::test();
131168fd743cd3278364c9ec13da437586d989641265Howard Hinnant    t2::test();
13121309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    t3::test();
13131309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    t4::test();
13141309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    t5::test();
13151309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    t6::test();
13161309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    t7::test();
13171309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    t8::test();
13181309366d3676ca5a34bea0388ad2d2dd5701dc9bHoward Hinnant    t9::test();
1319cc614df38c199d9781a6dea123e714970e82711fHoward Hinnant    time_point t1 = Clock::now();
1320cc614df38c199d9781a6dea123e714970e82711fHoward Hinnant    std::cout << NS(t1-t0).count() << " microseconds\n";
132168fd743cd3278364c9ec13da437586d989641265Howard Hinnant}
1322