1 namespace A
2 {
3 class C
4 {
5 public:
6 static const int x = 11;
7 };
8
9 int
first(C c)10 first (C c)
11 {
12 return 11;
13 }
14
15 int
first(int a,C c)16 first (int a, C c)
17 {
18 return 22;
19 }
20
21 int
second(int a,int b,C cc,int c,int d)22 second (int a, int b, C cc, int c, int d)
23 {
24 return 33;
25 }
26
27 int
entry(C c)28 entry (C c)
29 {
30 return 44;
31 }
32 }
33
34 struct B
35 {
36 A::C c;
37 };
38
39 //------------
40
41 namespace E
42 {
43 class O{};
foo(O o)44 int foo (O o){return 1; }
foo(O o,O o2)45 int foo (O o, O o2){return 2; }
foo(O o,O o2,int i)46 int foo (O o, O o2, int i){return 3; }
47 }
48
49 namespace F
50 {
51 class O{};
foo(O fo,::E::O eo)52 int foo ( O fo, ::E::O eo){ return 4;}
foo(int i,O fo,::E::O eo)53 int foo (int i, O fo, ::E::O eo){ return 5;}
54 }
55
56 namespace G
57 {
58 class O{};
foo(O go,::F::O fo,::E::O eo)59 int foo (O go, ::F::O fo, ::E::O eo){ return 6; }
60 }
61
62 //------------
63
64 namespace H
65 {
66 class O{};
foo(O)67 int foo (O){ return 7;}
68 }
69
70 namespace I
71 {
72 class O: public H::O {};
73 class X: H::O{};
74 }
75
76 //------------
77
78 namespace J
79 {
80 union U{};
81 struct S{};
82 enum E{};
83
84 class A{
85 public:
86 class B{};
87 };
88
89 class C{};
90
foo(U)91 int foo (U){ return 8;}
foo(S)92 int foo (S){ return 9;}
foo(E)93 int foo (E){ return 10;}
foo(A::B)94 int foo (A::B){ return 11;}
foo(A *)95 int foo (A*){ return 12;}
foo(A **)96 int foo (A**){ return 13;}
foo(C[])97 int foo (C[]){ return 14;}
98
99 }
100 //------------
101
102 namespace K{
103 class O{};
104
foo(O,int)105 int foo(O, int){
106 return 15;
107 }
108
bar(O,int)109 int bar(O, int){
110 return 15;
111 }
112 }
113
foo(K::O,float)114 int foo(K::O, float){
115 return 16;
116 }
117
bar(K::O,int)118 int bar(K::O, int){
119 return 16;
120 }
121 //------------
122
123 namespace L {
124 namespace A{
125 namespace B{
126 class O {};
127
foo(O)128 int foo (O){
129 return 17;
130 }
131
132 }
133 }
134 }
135
136 //------------
137
138 namespace M {
139 class A{
140 public:
foo(char)141 int foo(char) {
142 return 18;
143 }
144 };
145
foo(A,char)146 int foo(A,char){
147 return 19;
148 }
149
foo(A *,char)150 int foo(A *,char){
151 return 23;
152 }
153
bar(char)154 int bar(char){
155 return 21;
156 }
157
158 namespace N {
foo(::M::A,int)159 int foo(::M::A,int){
160 return 20;
161 }
162
bar(int)163 int bar(int){
164 return 22;
165 }
166 }
167 }
168 //------------
169
170 namespace O {
171 class A{};
172
foo(A,int)173 int foo(A,int){
174 return 23;
175 }
176
177 }
178
179 typedef O::A TOA;
180 typedef TOA TTOA;
181
182 //------------
183
184 static union {
185 int a;
186 char b;
187 }p_union;
188
189 //------------
190
191 namespace P {
192 class Q{
193 public:
operator ==(int)194 int operator== (int)
195 {
196 return 24;
197 }
198
operator ==(float)199 int operator== (float)
200 {
201 return 25;
202 }
203
operator +(float)204 int operator+ (float)
205 {
206 return 26;
207 }
208
209 };
210
operator !=(Q,int)211 int operator!= (Q, int)
212 {
213 return 27;
214 }
215
operator !=(Q,double)216 int operator!= (Q, double)
217 {
218 return 28;
219 }
220
operator +(Q,int)221 int operator+ (Q, int)
222 {
223 return 29;
224 }
225
operator ++(Q)226 int operator++ (Q)
227 {
228 return 30;
229 }
230 }
231
232 //------------
233
234 class R {
235 public:
rfoo()236 int rfoo(){ return 31; }
rbar()237 int rbar(){
238 return 1; // marker1
239 }
240 };
241
242 //------------
243
244 int
main()245 main ()
246 {
247 A::C c;
248 B b;
249
250 A::first (c);
251 first (0, c);
252 second (0, 0, c, 0, 0);
253 entry (c);
254 A::first (b.c);
255
256 E::O eo;
257 F::O fo;
258 G::O go;
259
260 foo (eo);
261 foo (eo, eo);
262 foo (eo, eo, 1);
263 foo (fo, eo);
264 foo (1 ,fo, eo);
265 foo (go, fo, eo);
266
267 I::O io;
268 I::X ix;
269
270 foo (io);
271 //foo (ix);
272
273 J::U ju;
274 J::S js;
275 J::E je;
276 J::A::B jab;
277 J::A *jap;
278 J::A **japp;
279 J::C jca[3];
280
281 foo (ju);
282 foo (js);
283 foo (je);
284 foo (jab);
285 foo (jap);
286 foo (japp);
287 foo (jca);
288
289 K::O ko;
290 foo (ko, 1);
291 foo (ko, 1.0f);
292 //bar(ko,1);
293
294 L::A::B::O labo;
295 foo (labo);
296
297 M::A ma;
298 foo(ma,'a');
299 ma.foo('a');
300 M::N::foo(ma,'a');
301
302 M::bar('a');
303 M::N::bar('a');
304
305 TTOA ttoa;
306 foo (ttoa, 'a');
307
308 p_union = {0};
309
310 P::Q q;
311 q == 5;
312 q == 5.0f;
313 q != 5;
314 q != 5.0f;
315 q + 5;
316 q + 5.0f;
317
318 ++q;
319
320 R r;
321 r.rbar();
322 r.rfoo();
323
324 return first (0, c) + foo (eo) +
325 foo (eo, eo) + foo (eo, eo, 1) +
326 foo (fo, eo) + foo (1 ,fo, eo) +
327 foo (go, fo, eo);
328 }
329