1185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant//===------------------------- dynamic_cast3.cpp --------------------------===//
2185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant//
3185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant//                     The LLVM Compiler Infrastructure
4185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant//
5185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant// Source Licenses. See LICENSE.TXT for details.
7185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant//
8185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant//===----------------------------------------------------------------------===//
9185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
10185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant#include <cassert>
11e571c0cb34dbc3799349cf2166fb422ff9d2c08dDan Albert#include "support/timer.hpp"
12185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
13185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant/*
14185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
15185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA1   A2   A3
16185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
17185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant*/
18185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
19185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t1
20185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
21185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
22185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
23185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
24185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
259a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
26185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
27185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
28185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
29185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
30185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
31185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
32185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
339a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
34185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
35185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
36185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
37185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
38185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
39185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
40185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
419a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
42185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
43185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
44185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
45185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
46185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
47185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
48185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
49185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
50185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
51185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
52185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
53185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == 0);
54185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
55185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
56185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == 0);
57185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
58185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
59185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
60185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
61185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
62185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t1
63185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
64185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant/*
65185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
66185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA1   A2
67185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant|
68185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA3
69185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
70185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant*/
71185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
72185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t2
73185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
74185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
75185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
76185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
77185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
789a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
79185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
80185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
81185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
82185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
83185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
84185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
85185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
869a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
87185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
88185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
89185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
90185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
91185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
92185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1
93185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
94185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
959a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
96185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
97185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
98185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
99185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
100185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
101185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
102185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
103185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
104185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
105185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
106185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
107185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
108185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
109185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
110185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
111185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
112185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
113185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == 0);
114185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
115185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
116185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
117185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
118185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
119185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
120185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
121185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t2
122185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
123185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t3
124185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
125185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
126185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
127185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
128185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
1299a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
130185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
131185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
132185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
133185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
134185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
135185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
136185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
1379a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
138185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
139185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
140185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
141185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
142185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
143185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1
144185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
145185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
1469a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
147185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
148185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
149185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
150185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
151185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
152185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
153185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
154185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
155185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
156185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
157185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
158185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
159185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
160185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
161185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
162185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
163185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
164185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == 0);
165185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
166185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
167185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
168185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
169185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
170185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
171185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
172185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t3
173185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
174185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t4
175185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
176185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
177185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
178185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
179185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
1809a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
181185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
182185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
183185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
184185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
185185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
186185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
187185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
1889a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
189185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
190185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
191185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
192185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
193185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
194185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1
195185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
196185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
1979a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
198185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
199185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
200185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
201185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
202185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
203185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
204185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
205185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
206185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
207185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
208185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
209185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
210185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
211185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
212185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
213185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
214185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
215185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == 0);
216185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
217185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
218185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
219185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
220185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
221185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
222185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
223185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t4
224185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
225185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t5
226185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
227185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
228185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
229185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
230185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
2319a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
232185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
233185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
234185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
235185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
236185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
237185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
238185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
2399a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
240185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
241185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
242185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
243185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
244185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
245185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1
246185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
247185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
2489a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
249185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
250185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
251185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
252185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
253185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
254185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
255185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
256185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
257185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
258185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
259185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
260185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
261185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
262185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
263185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
264185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
265185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
266185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == 0);
267185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
268185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
269185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
270185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
271185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
272185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
273185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
274185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t5
275185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
276185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant/*
277185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
278185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA1   A2
279185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant \  /
280185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant  A3
281185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
282185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant*/
283185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
284185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t6
285185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
286185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
287185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
288185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
289185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
2909a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
291185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
292185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
293185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
294185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
295185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
296185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
297185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
2989a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
299185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
300185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
301185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
302185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
303185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
304185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1,
305185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
306185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
307185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
3089a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
309185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
310185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
311185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
312185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
313185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
314185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
315185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
316185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
317185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
318185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
319185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
320185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
321185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
322185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
323185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
324185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
325185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
326185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
327185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
328185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
329185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
330185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
331185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
332185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
333185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
334185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
335185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
336185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
337185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
338185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
339185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t6
340185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
341185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t7
342185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
343185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
344185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
345185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
346185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
3479a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
348185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
349185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
350185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
351185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
352185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
353185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
354185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
3559a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
356185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
357185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
358185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
359185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
360185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
361185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1,
362185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
363185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
364185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
3659a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
366185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
367185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
368185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
369185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
370185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
371185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
372185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
373185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
374185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
375185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
376185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
377185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
378185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
379185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
380185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
381185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
382185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
383185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
384185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
385185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
386185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
387185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
388185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
389185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
390185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
391185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
392185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
393185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
394185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
395185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
396185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t7
397185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
398185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t8
399185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
400185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
401185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
402185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
403185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
4049a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
405185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
406185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
407185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
408185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
409185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
410185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
411185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
4129a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
413185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
414185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
415185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
416185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
417185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
418185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1,
419185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
420185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
421185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
4229a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
423185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
424185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
425185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
426185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
427185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
428185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
429185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
430185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
431185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
432185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
433185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
434185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
435185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
436185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
437185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == 0);
438185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
439185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
440185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
441185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
442185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
443185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
444185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
445185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
446185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
447185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
448185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
449185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
450185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
451185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
452185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t8
453185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
454185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t9
455185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
456185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
457185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
458185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
459185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
4609a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
461185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
462185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
463185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
464185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
465185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
466185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
467185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
4689a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
469185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
470185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
471185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
472185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
473185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
474185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1,
475185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
476185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
477185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
4789a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
479185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
480185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
481185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
482185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
483185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
484185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
485185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
486185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
487185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
488185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
489185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
490185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
491185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
492185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
493185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == 0);
494185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
495185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
496185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
497185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
498185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
499185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
500185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
501185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
502185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
503185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
504185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
505185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
506185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
507185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
508185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t9
509185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
510185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t10
511185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
512185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
513185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
514185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
515185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
5169a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
517185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
518185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
519185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
520185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
521185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
522185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
523185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
5249a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
525185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
526185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
527185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
528185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
529185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
530185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1,
531185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public virtual A2
532185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
533185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
5349a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
535185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
536185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
537185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
538185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
539185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
540185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
541185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
542185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
543185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
544185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
545185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
546185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
547185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
548185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
549185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
550185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
551185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
552185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
553185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
554185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
555185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
556185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
557185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
558185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
559185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
560185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
561185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
562185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
563185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
564185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
565185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t10
566185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
567185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t11
568185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
569185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
570185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
571185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
572185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
5739a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
574185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
575185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
576185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
577185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
578185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
579185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
580185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
5819a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
582185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
583185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
584185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
585185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
586185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
587185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1,
588185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public virtual A2
589185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
590185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
5919a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
592185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
593185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
594185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
595185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
596185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
597185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
598185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
599185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
600185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
601185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
602185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
603185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
604185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
605185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
606185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == 0);
607185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
608185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
609185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
610185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
611185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
612185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
613185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
614185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
615185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
616185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
617185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
618185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
619185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
620185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
621185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t11
622185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
623185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t12
624185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
625185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
626185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
627185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
628185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
6299a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
630185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
631185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
632185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
633185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
634185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
635185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
636185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
6379a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
638185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
639185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
640185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
641185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
642185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
643185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1,
644185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public virtual A2
645185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
646185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
6479a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
648185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
649185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
650185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
651185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
652185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
653185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
654185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
655185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
656185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
657185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
658185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
659185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
660185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
661185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
662185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == 0);
663185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
664185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
665185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
666185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
667185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
668185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
669185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
670185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
671185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
672185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
673185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
674185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
675185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
676185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
677185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t12
678185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
679185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t13
680185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
681185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
682185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
683185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
684185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
6859a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
686185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
687185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
688185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
689185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
690185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
691185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
692185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
6939a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
694185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
695185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
696185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
697185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
698185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
699185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1,
700185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private A2
701185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
702185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
7039a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
704185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
705185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
706185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
707185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
708185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
709185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
710185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
711185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
712185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
713185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
714185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
715185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
716185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
717185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
718185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == 0);
719185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
720185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
721185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
722185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
723185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
724185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
725185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
726185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
727185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
728185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
729185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
730185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
731185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
732185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t13
733185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
734185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t14
735185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
736185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
737185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
738185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
739185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
7409a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
741185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
742185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
743185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
744185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
745185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
746185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
747185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
7489a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
749185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
750185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
751185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
752185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
753185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
754185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1,
755185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private A2
756185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
757185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
7589a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
759185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
760185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
761185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
762185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
763185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
764185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
765185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
766185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
767185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
768185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
769185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
770185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
771185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
772185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
773185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == 0);
774185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
775185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
776185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
777185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
778185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
779185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
780185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
781185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
782185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
783185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
784185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
785185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
786185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
787185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t14
788185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
789185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t15
790185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
791185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
792185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
793185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
794185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
7959a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
796185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
797185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
798185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
799185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
800185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
801185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
802185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
8039a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
804185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
805185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
806185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
807185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
808185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
809185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1,
810185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private virtual A2
811185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
812185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
8139a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
814185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
815185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
816185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
817185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
818185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
819185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
820185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
821185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
822185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
823185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
824185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
825185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
826185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == 0);
827185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
828185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == 0);
829185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
830185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
831185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
832185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
833185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
834185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
835185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
836185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
837185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
838185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
839185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
840185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
841185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
842185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t15
843185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
844185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant/*
845185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
846185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA1
847185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant|
848185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA2
849185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant|
850185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA3
851185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
852185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant*/
853185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
854185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t16
855185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
856185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
857185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
858185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
859185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
8609a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
861185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
862185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
863185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
864185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
865185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
866185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1
867185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
868185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
8699a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
870185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
871185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
872185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
873185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
874185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
875185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
876185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A2
877185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
878185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
8799a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
880185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
881185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
882185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
883185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
884185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
885185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
886185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
887185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
888185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
889185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
890185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
891185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
892185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
893185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
894185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
895185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
896185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
897185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
898185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
899185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
900185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
901185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
902185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
903185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
904185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
905185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
906185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
907185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
908185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
909185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
910185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
911185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
912185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
913185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t16
914185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
915185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t17
916185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
917185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
918185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
919185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
920185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
9219a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
922185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
923185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
924185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
925185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
926185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
927185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1
928185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
929185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
9309a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
931185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
932185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
933185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
934185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
935185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
936185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
937185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A2
938185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
939185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
9409a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
941185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
942185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
943185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
944185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
945185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
946185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
947185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
948185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
949185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
950185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
951185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
952185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
953185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
954185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
955185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
956185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
957185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
958185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
959185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
960185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
961185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
962185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
963185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
964185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
965185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
966185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
967185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
968185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
969185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
970185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
971185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
972185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
973185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
974185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t17
975185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
976185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t18
977185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
978185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
979185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
980185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
981185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
9829a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
983185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
984185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
985185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
986185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
987185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
988185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1
989185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
990185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
9919a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
992185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
993185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
994185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
995185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
996185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
997185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
998185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A2
999185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1000185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
10019a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1002185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1003185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1004185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1005185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1006185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1007185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1008185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1009185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1010185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1011185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1012185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1013185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1014185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
1015185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1016185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1017185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1018185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1019185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
1020185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1021185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
1022185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1023185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1024185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1025185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1026185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
1027185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
1028185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1029185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1030185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1031185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t18
1032185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1033185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t19
1034185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1035185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1036185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1037185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1038185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
10399a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1040185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1041185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1042185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1043185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1044185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
104541458a0681f60e9b6778dbb799cbb5647db628ebHoward Hinnant    : protected virtual A1
1046185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1047185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
10489a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1049185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1050185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1051185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1052185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1053185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1054185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1055185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A2
1056185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1057185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
10589a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1059185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1060185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1061185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1062185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1063185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1064185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1065185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1066185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1067185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1068185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1069185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1070185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1071185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
1072185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1073185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1074185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1075185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1076185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
1077185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1078185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
1079185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1080185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1081185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1082185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1083185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
1084185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
1085185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1086185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1087185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1088185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t19
1089185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1090185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t20
1091185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1092185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1093185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1094185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1095185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
10969a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1097185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1098185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1099185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1100185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1101185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1102185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1
1103185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1104185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
11059a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1106185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1107185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1108185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1109185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1110185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1111185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1112185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A2
1113185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1114185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
11159a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1116185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1117185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1118185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1119185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1120185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1121185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1122185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1123185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1124185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1125185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1126185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1127185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1128185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1129185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
1130185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
1131185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
1132185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
1133185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1134185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1135185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
1136185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1137185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
1138185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1139185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
1140185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1141185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1142185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1143185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1144185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
1145185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
1146185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1147185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1148185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1149185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t20
1150185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1151185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t21
1152185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1153185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1154185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1155185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1156185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
11579a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1158185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1159185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1160185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1161185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1162185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1163185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1
1164185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1165185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
11669a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1167185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1168185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1169185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1170185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1171185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1172185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1173185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A2
1174185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1175185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
11769a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1177185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1178185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1179185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1180185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1181185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1182185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1183185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1184185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1185185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1186185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1187185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1188185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1189185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
1190185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1191185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1192185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1193185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1194185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
1195185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1196185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
1197185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1198185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1199185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1200185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1201185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
1202185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
1203185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1204185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1205185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1206185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t21
1207185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1208185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t22
1209185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1210185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1211185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1212185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1213185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
12149a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1215185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1216185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1217185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1218185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1219185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
122041458a0681f60e9b6778dbb799cbb5647db628ebHoward Hinnant    : protected virtual A1
1221185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1222185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
12239a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1224185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1225185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1226185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1227185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1228185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1229185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1230185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A2
1231185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1232185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
12339a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1234185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1235185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1236185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1237185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1238185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1239185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1240185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1241185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1242185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1243185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1244185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1245185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1246185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
1247185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1248185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1249185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1250185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1251185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
1252185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1253185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
1254185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1255185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1256185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1257185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1258185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
1259185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
1260185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1261185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1262185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1263185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t22
1264185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1265185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t23
1266185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1267185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1268185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1269185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1270185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
12719a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1272185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1273185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1274185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1275185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1276185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1277185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1
1278185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1279185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
12809a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1281185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1282185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1283185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1284185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1285185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1286185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1287185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A2
1288185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1289185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
12909a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1291185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1292185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t23::A1* getA1() {return A2::getA1();}
1293185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1294185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1295185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1296185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1297185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1298185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1299185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1300185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1301185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1302185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1303185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1304185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
1305185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1306185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1307185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1308185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1309185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
1310185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1311185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1312185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1313185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1314185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1315185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
1316185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
1317185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1318185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1319185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1320185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t23
1321185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1322185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t24
1323185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1324185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1325185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1326185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1327185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
13289a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1329185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1330185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1331185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1332185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1333185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
133441458a0681f60e9b6778dbb799cbb5647db628ebHoward Hinnant    : protected virtual A1
1335185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1336185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
13379a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1338185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1339185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1340185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1341185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1342185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1343185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1344185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A2
1345185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1346185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
13479a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1348185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1349185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t24::A1* getA1() {return A2::getA1();}
1350185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1351185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1352185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1353185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1354185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1355185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1356185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1357185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1358185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1359185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1360185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1361185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
1362185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1363185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1364185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1365185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1366185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
1367185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1368185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1369185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1370185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1371185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1372185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
1373185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
1374185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1375185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1376185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1377185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t24
1378185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1379185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t25
1380185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1381185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1382185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1383185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1384185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
13859a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1386185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1387185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1388185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1389185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1390185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
139141458a0681f60e9b6778dbb799cbb5647db628ebHoward Hinnant    : protected virtual A1
1392185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1393185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
13949a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1395185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1396185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1397185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1398185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1399185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1400185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1401185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A2
1402185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1403185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
14049a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1405185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1406185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t25::A1* getA1() {return A2::getA1();}
1407185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1408185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1409185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1410185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1411185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1412185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1413185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1414185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1415185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1416185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1417185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1418185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
1419185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1420185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1421185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1422185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1423185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
1424185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1425185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1426185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1427185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1428185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1429185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
1430185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
1431185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1432185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1433185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1434185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t25
1435185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1436185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant/*
1437185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1438185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA1 A1
1439185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant|  |
1440185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA2 |
1441185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant \ |
1442185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant  A3
1443185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1444185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant*/
1445185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1446185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t26
1447185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1448185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1449185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1450185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1451185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
14529a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1453185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1454185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1455185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1456185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1457185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1458185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1
1459185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1460185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
14619a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1462185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1463185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1464185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1465185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1466185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1467185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1468185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1,
1469185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
1470185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1471185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
14729a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1473185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1474185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA12() {return A2::getA1();}
1475185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1476185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1477185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1478185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1479185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1480185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1481185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1482185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1483185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1484185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1485185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1486185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
1487185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());
1488185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());
1489185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1490185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1491185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
1492185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1493185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());
1494185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1495185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
1496185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1497185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1498185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1499185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1500185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA12()) == a3.getA3());
1501185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
1502185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1503185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1504185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1505185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t26
1506185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1507185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t27
1508185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1509185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1510185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1511185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1512185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
15139a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1514185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1515185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1516185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1517185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1518185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1519185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1
1520185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1521185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
15229a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1523185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1524185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1525185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1526185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1527185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1528185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1529185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1,
1530185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
1531185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1532185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
15339a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1534185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1535185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA12() {return A2::getA1();}
1536185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1537185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1538185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1539185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1540185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1541185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1542185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1543185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1544185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1545185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1546185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1547185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());
1548185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1549185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1550185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1551185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1552185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA12()) == 0);
1553185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1554185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
1555185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1556185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1557185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1558185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1559185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA12()) == 0);
1560185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
1561185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1562185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1563185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1564185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t27
1565185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1566185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t28
1567185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1568185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1569185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1570185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1571185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
15729a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1573185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1574185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1575185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1576185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1577185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1578185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1
1579185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1580185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
15819a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1582185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1583185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1584185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1585185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1586185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1587185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1588185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1,
1589185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
1590185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1591185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
15929a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1593185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1594185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA12() {return A2::getA1();}
1595185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1596185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1597185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1598185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1599185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1600185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1601185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1602185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1603185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1604185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1605185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1606185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
1607185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());
1608185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1609185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1610185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
1611185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1612185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());
1613185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1614185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
1615185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1616185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1617185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1618185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1619185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA12()) == a3.getA3());
1620185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
1621185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1622185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1623185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1624185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t28
1625185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1626185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t29
1627185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1628185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1629185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1630185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1631185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
16329a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1633185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1634185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1635185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1636185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1637185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1638185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1
1639185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1640185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
16419a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1642185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1643185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1644185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1645185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1646185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1647185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1648185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1,
1649185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private A2
1650185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1651185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
16529a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1653185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1654185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA12() {return A2::getA1();}
1655185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1656185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1657185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1658185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1659185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1660185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1661185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1662185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1663185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1664185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1665185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1666185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
1667185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());
1668185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1669185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1670185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
1671185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1672185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());
1673185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1674185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1675185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1676185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1677185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1678185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA12()) == 0);
1679185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
1680185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1681185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1682185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1683185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t29
1684185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1685185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t30
1686185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1687185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1688185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1689185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1690185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
16919a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1692185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1693185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1694185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1695185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1696185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1697185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1
1698185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1699185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
17009a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1701185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1702185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1703185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1704185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1705185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1706185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1707185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1,
1708185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private A2
1709185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1710185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
17119a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1712185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1713185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA12() {return A2::getA1();}
1714185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1715185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1716185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1717185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1718185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1719185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1720185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1721185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1722185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1723185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1724185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1725185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
1726185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());
1727185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA12());
1728185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1729185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1730185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
1731185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1732185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA12()) == a3.getA2());
1733185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1734185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1735185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1736185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1737185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1738185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA12()) == 0);
1739185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
1740185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1741185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1742185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1743185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t30
1744185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1745185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t31
1746185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1747185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1748185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1749185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1750185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
17519a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1752185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1753185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1754185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1755185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1756185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1757185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1
1758185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1759185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
17609a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1761185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1762185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1763185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1764185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1765185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1766185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1767185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public A1,
1768185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private A2
1769185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1770185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
17719a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1772185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1773185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA12() {return A2::getA1();}
1774185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1775185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1776185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1777185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1778185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1779185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1780185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1781185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1782185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1783185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1784185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1785185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());
1786185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1787185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1788185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1789185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1790185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA12()) == 0);
1791185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1792185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1793185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1794185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1795185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1796185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA12()) == 0);
1797185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
1798185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1799185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1800185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1801185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t31
1802185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1803185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t32
1804185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1805185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1806185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1807185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1808185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
18099a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1810185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1811185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1812185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1813185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1814185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1815185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1
1816185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1817185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
18189a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1819185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1820185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1821185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1822185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1823185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1824185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1825185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1,
1826185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
1827185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1828185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
18299a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1830185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1831185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA12() {return A2::getA1();}
1832185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1833185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1834185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1835185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1836185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1837185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1838185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1839185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1840185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1841185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1842185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1843185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());
1844185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1845185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1846185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1847185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1848185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA12()) == 0);
1849185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1850185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1851185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1852185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1853185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1854185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA12()) == 0);
1855185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
1856185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1857185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1858185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1859185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t32
1860185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1861185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t33
1862185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1863185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1864185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1865185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1866185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
18679a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1868185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1869185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1870185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1871185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1872185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1873185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1
1874185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1875185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
18769a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1877185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1878185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1879185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1880185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1881185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1882185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1883185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private A1,
1884185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private A2
1885185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1886185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
18879a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1888185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1889185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA12() {return A2::getA1();}
1890185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1891185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1892185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1893185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1894185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1895185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1896185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1897185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1898185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1899185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1900185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1901185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA12()) == a3.getA12());
1902185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1903185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1904185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
1905185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1906185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA12()) == 0);
1907185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1908185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1909185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1910185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1911185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1912185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA12()) == 0);
1913185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
1914185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1915185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1916185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1917185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t33
1918185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1919185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant/*
1920185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1921185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA1
1922185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant| \
1923185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward HinnantA2 \
1924185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant \ |
1925185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant  A3
1926185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1927185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant*/
1928185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1929185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t34
1930185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1931185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1932185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1933185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1934185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
19359a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1936185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1937185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1938185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1939185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1940185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
1941185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1
1942185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1943185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
19449a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
1945185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1946185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
1947185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1948185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1949185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1950185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
1951185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1,
1952185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
1953185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1954185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
19559a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
1956185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1957185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return A1::getA1();}
1958185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
1959185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
1960185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
1961185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1962185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
1963185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1964185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
1965185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
1966185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
1967185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
1968185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
1969185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
1970185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
1971185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
1972185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
1973185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1974185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
1975185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
1976185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
1977185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
1978185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
1979185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
1980185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1981185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
1982185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
1983185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
1984185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
1985185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
1986185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
1987185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
1988185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1989185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t34
1990185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1991185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t35
1992185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1993185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1994185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
1995185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
1996185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
19979a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
1998185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
1999185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2000185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2001185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2002185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
2003185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1
2004185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2005185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
20069a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
2007185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2008185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2009185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2010185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2011185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2012185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
2013185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1,
2014185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
2015185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2016185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
20179a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
2018185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2019185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return A1::getA1();}
2020185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2021185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
2022185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2023185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2024185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
2025185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2026185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
2027185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
2028185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
2029185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
2030185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
2031185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
2032185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
2033185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2034185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
2035185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
2036185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
2037185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
2038185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
2039185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
2040185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2041185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
2042185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
2043185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
2044185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
2045185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
2046185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
2047185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
2048185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2049185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t35
2050185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2051185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t36
2052185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2053185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2054185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
2055185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2056185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
20579a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
2058185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2059185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2060185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2061185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2062185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
2063185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1
2064185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2065185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
20669a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
2067185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2068185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2069185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2070185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2071185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2072185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
2073185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1,
2074185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
2075185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2076185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
20779a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
2078185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2079185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return A1::getA1();}
2080185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2081185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
2082185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2083185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2084185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
2085185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2086185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
2087185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
2088185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
2089185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
2090185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
2091185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
2092185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
2093185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
2094185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
2095185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2096185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
2097185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
2098185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
2099185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
2100185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
2101185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
2102185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2103185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
2104185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
2105185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
2106185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
2107185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
2108185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
2109185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
2110185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2111185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t36
2112185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2113185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t37
2114185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2115185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2116185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
2117185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2118185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
21199a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
2120185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2121185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2122185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2123185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2124185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
2125185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1
2126185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2127185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
21289a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
2129185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2130185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2131185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2132185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2133185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2134185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
2135185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1,
2136185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private A2
2137185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2138185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
21399a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
2140185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2141185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return A1::getA1();}
2142185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2143185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
2144185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2145185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2146185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
2147185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2148185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
2149185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
2150185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
2151185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
2152185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
2153185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
2154185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
2155185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
2156185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
2157185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2158185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
2159185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
2160185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
2161185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
2162185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
2163185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2164185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
2165185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
2166185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
2167185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
2168185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
2169185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
2170185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
2171185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2172185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t37
2173185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2174185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t38
2175185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2176185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2177185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
2178185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2179185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
21809a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
2181185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2182185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2183185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2184185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2185185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
2186185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1
2187185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2188185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
21899a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
2190185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2191185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2192185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2193185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2194185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2195185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
2196185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1,
2197185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private A2
2198185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2199185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
22009a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
2201185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2202185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return A1::getA1();}
2203185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2204185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
2205185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2206185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2207185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
2208185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2209185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
2210185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
2211185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
2212185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
2213185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
2214185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA2()) == a2.getA1());
2215185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
2216185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA2()) == a3.getA1());
2217185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2218185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
2219185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == a2.getA2());
2220185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
2221185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == a3.getA2());
2222185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
2223185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2224185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
2225185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
2226185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
2227185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
2228185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
2229185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
2230185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
2231185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2232185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t38
2233185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2234185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t39
2235185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2236185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2237185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
2238185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2239185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
22409a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
2241185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2242185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2243185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2244185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2245185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
2246185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1
2247185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2248185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
22499a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
2250185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2251185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2252185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2253185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2254185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2255185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
2256185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : public virtual A1,
2257185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private A2
2258185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2259185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
22609a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
2261185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2262185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return A1::getA1();}
2263185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2264185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
2265185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2266185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2267185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
2268185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2269185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
2270185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
2271185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
2272185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
2273185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
2274185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
2275185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA3()) == a3.getA1());
2276185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2277185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
2278185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
2279185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
2280185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
2281185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
2282185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2283185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
2284185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
2285185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
2286185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == a3.getA3());
2287185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
2288185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
2289185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
2290185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2291185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t39
2292185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2293185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t40
2294185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2295185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2296185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
2297185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2298185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
22999a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
2300185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2301185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2302185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2303185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2304185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
2305185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1
2306185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2307185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
23089a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
2309185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2310185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2311185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2312185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2313185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2314185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
2315185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1,
2316185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      public A2
2317185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2318185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
23199a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
2320185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2321185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return A1::getA1();}
2322185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2323185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
2324185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2325185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2326185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
2327185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2328185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
2329185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
2330185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
2331185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
2332185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
2333185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
2334185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2335185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
2336185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
2337185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
2338185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
2339185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
2340185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA3()) == a3.getA2());
2341185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2342185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
2343185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
2344185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
2345185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
2346185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == a3.getA3());
2347185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
2348185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
2349185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2350185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t40
2351185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2352185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantnamespace t41
2353185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2354185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2355185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A1
2356185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2357185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[43981];
23589a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A1() {}
2359185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2360185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2361185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2362185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2363185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A2
2364185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1
2365185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2366185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[34981];
23679a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A2() {}
2368185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2369185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return this;}
2370185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2371185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2372185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2373185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantstruct A3
2374185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    : private virtual A1,
2375185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant      private A2
2376185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2377185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    char _[93481];
23789a1aad5a7ffe86b7d30157e72cd5a51d2a4f1649Howard Hinnant    virtual ~A3() {}
2379185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2380185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1* getA1() {return A1::getA1();}
2381185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2* getA2() {return this;}
2382185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3* getA3() {return this;}
2383185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant};
2384185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2385185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantvoid test()
2386185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2387185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A1 a1;
2388185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A2 a2;
2389185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    A3 a3;
2390185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a1.getA1()) == a1.getA1());
2391185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a2.getA1()) == a2.getA1());
2392185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A1*>(a3.getA1()) == a3.getA1());
2393185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2394185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a1.getA1()) == 0);
2395185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA1()) == 0);
2396185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a2.getA2()) == a2.getA2());
2397185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA1()) == 0);
2398185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A2*>(a3.getA2()) == a3.getA2());
2399185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2400185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a1.getA1()) == 0);
2401185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA1()) == 0);
2402185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a2.getA2()) == 0);
2403185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA1()) == 0);
2404185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA2()) == 0);
2405185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    assert(dynamic_cast<A3*>(a3.getA3()) == a3.getA3());
2406185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
2407185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2408185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}  // t41
2409185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant
2410185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnantint main()
2411185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant{
2412e571c0cb34dbc3799349cf2166fb422ff9d2c08dDan Albert    timer t;
2413185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t1::test();
2414185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t2::test();
2415185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t3::test();
2416185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t4::test();
2417185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t5::test();
2418185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t6::test();
2419185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t7::test();
2420185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t8::test();
2421185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t9::test();
2422185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t10::test();
2423185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t11::test();
2424185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t12::test();
2425185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t13::test();
2426185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t14::test();
2427185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t15::test();
2428185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t16::test();
2429185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t17::test();
2430185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t18::test();
2431185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t19::test();
2432185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t20::test();
2433185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t21::test();
2434185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t22::test();
2435185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t23::test();
2436185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t24::test();
2437185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t25::test();
2438185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t26::test();
2439185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t27::test();
2440185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t28::test();
2441185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t29::test();
2442185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t30::test();
2443185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t31::test();
2444185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t32::test();
2445185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t33::test();
2446185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t34::test();
2447185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t35::test();
2448185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t36::test();
2449185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t37::test();
2450185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t38::test();
2451185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t39::test();
2452185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t40::test();
2453185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant    t41::test();
2454185dc7d61ff4e58909f043f3a0c0d7d1d87ba7daHoward Hinnant}
2455