1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
10 #include "support/timer.h"
12 // This test explicitly tests dynamic cast with types that have inaccessible
14 #if defined(__clang__)
15 # pragma clang diagnostic ignored "-Winaccessible-base"
16 #elif defined(__GNUC__)
17 # pragma GCC diagnostic ignored "-Winaccessible-base"
34 A1
* getA1() {return this;}
42 A2
* getA2() {return this;}
50 A3
* getA3() {return this;}
58 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
59 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
60 assert(dynamic_cast<A1
*>(a3
.getA3()) == 0);
61 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
62 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
63 assert(dynamic_cast<A2
*>(a3
.getA3()) == 0);
64 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
65 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
66 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
87 A1
* getA1() {return this;}
95 A2
* getA2() {return this;}
104 A3
* getA3() {return this;}
112 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
113 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
114 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
115 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
117 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
118 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
119 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
120 assert(dynamic_cast<A2
*>(a3
.getA3()) == 0);
122 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
123 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
124 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
125 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
138 A1
* getA1() {return this;}
146 A2
* getA2() {return this;}
155 A3
* getA3() {return this;}
163 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
164 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
165 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
166 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
168 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
169 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
170 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
171 assert(dynamic_cast<A2
*>(a3
.getA3()) == 0);
173 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
174 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
175 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
176 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
189 A1
* getA1() {return this;}
197 A2
* getA2() {return this;}
206 A1
* getA1() {return this;}
207 A3
* getA3() {return this;}
215 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
216 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
217 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
219 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
220 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
221 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
222 assert(dynamic_cast<A2
*>(a3
.getA3()) == 0);
224 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
225 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
226 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
227 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
240 A1
* getA1() {return this;}
248 A2
* getA2() {return this;}
257 A1
* getA1() {return this;}
258 A3
* getA3() {return this;}
266 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
267 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
268 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
270 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
271 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
272 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
273 assert(dynamic_cast<A2
*>(a3
.getA3()) == 0);
275 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
276 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
277 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
278 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
299 A1
* getA1() {return this;}
307 A2
* getA2() {return this;}
317 A1
* getA1() {return this;}
318 A2
* getA2() {return this;}
319 A3
* getA3() {return this;}
327 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
328 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
329 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
330 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA1());
331 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
333 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
334 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
335 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
336 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
337 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
339 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
340 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
341 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
342 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
343 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
356 A1
* getA1() {return this;}
364 A2
* getA2() {return this;}
374 A1
* getA1() {return this;}
375 A2
* getA2() {return this;}
376 A3
* getA3() {return this;}
384 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
385 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
386 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
387 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA1());
388 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
390 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
391 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
392 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
393 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
394 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
396 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
397 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
398 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
399 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
400 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
413 A1
* getA1() {return this;}
421 A2
* getA2() {return this;}
431 A1
* getA1() {return this;}
432 A2
* getA2() {return this;}
433 A3
* getA3() {return this;}
441 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
442 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
443 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
444 assert(dynamic_cast<A1
*>(a3
.getA2()) == 0);
446 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
447 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
448 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
449 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
450 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
452 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
453 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
454 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
455 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
456 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
469 A1
* getA1() {return this;}
477 A2
* getA2() {return this;}
481 : private virtual A1
,
487 A1
* getA1() {return this;}
488 A2
* getA2() {return this;}
489 A3
* getA3() {return this;}
497 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
498 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
499 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
500 assert(dynamic_cast<A1
*>(a3
.getA2()) == 0);
502 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
503 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
504 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
505 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
506 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
508 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
509 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
510 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
511 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
512 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
525 A1
* getA1() {return this;}
533 A2
* getA2() {return this;}
543 A1
* getA1() {return this;}
544 A2
* getA2() {return this;}
545 A3
* getA3() {return this;}
553 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
554 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
555 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
556 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA1());
557 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
559 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
560 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
561 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
562 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
563 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
565 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
566 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
567 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
568 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
569 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
582 A1
* getA1() {return this;}
590 A2
* getA2() {return this;}
600 A1
* getA1() {return this;}
601 A2
* getA2() {return this;}
602 A3
* getA3() {return this;}
610 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
611 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
612 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
613 assert(dynamic_cast<A1
*>(a3
.getA2()) == 0);
615 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
616 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
617 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
618 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
619 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
621 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
622 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
623 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
624 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
625 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
638 A1
* getA1() {return this;}
646 A2
* getA2() {return this;}
650 : private virtual A1
,
656 A1
* getA1() {return this;}
657 A2
* getA2() {return this;}
658 A3
* getA3() {return this;}
666 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
667 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
668 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
669 assert(dynamic_cast<A1
*>(a3
.getA2()) == 0);
671 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
672 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
673 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
674 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
675 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
677 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
678 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
679 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
680 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
681 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
694 A1
* getA1() {return this;}
702 A2
* getA2() {return this;}
712 A1
* getA1() {return this;}
713 A2
* getA2() {return this;}
714 A3
* getA3() {return this;}
722 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
723 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
724 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
725 assert(dynamic_cast<A1
*>(a3
.getA2()) == 0);
727 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
728 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
729 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
730 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
732 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
733 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
734 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
735 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
736 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
749 A1
* getA1() {return this;}
757 A2
* getA2() {return this;}
761 : private virtual A1
,
767 A1
* getA1() {return this;}
768 A2
* getA2() {return this;}
769 A3
* getA3() {return this;}
777 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
778 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
779 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
780 assert(dynamic_cast<A1
*>(a3
.getA2()) == 0);
782 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
783 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
784 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
785 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
787 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
788 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
789 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
790 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
791 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
804 A1
* getA1() {return this;}
812 A2
* getA2() {return this;}
816 : private virtual A1
,
822 A1
* getA1() {return this;}
823 A2
* getA2() {return this;}
824 A3
* getA3() {return this;}
832 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
833 assert(dynamic_cast<A1
*>(a2
.getA2()) == 0);
834 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
835 assert(dynamic_cast<A1
*>(a3
.getA2()) == 0);
837 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
838 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
839 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
840 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
842 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
843 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
844 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
845 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
846 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
869 A1
* getA1() {return this;}
878 A1
* getA1() {return this;}
879 A2
* getA2() {return this;}
888 A1
* getA1() {return this;}
889 A2
* getA2() {return this;}
890 A3
* getA3() {return this;}
898 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
899 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
900 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
901 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
902 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA1());
903 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
905 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
906 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
907 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
908 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
909 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
910 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
912 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
913 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
914 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
915 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
916 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
917 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
930 A1
* getA1() {return this;}
939 A1
* getA1() {return this;}
940 A2
* getA2() {return this;}
949 A1
* getA1() {return this;}
950 A2
* getA2() {return this;}
951 A3
* getA3() {return this;}
959 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
960 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
961 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
962 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
963 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA1());
964 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
966 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
967 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
968 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
969 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
970 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
971 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
973 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
974 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
975 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
976 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
977 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
978 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
991 A1
* getA1() {return this;}
1000 A1
* getA1() {return this;}
1001 A2
* getA2() {return this;}
1010 A2
* getA2() {return this;}
1011 A3
* getA3() {return this;}
1019 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1020 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1021 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
1023 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1024 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1025 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1026 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
1027 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1028 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
1030 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1031 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1032 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1033 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
1034 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
1035 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1048 A1
* getA1() {return this;}
1052 : protected virtual A1
1057 A1
* getA1() {return this;}
1058 A2
* getA2() {return this;}
1067 A2
* getA2() {return this;}
1068 A3
* getA3() {return this;}
1076 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1077 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1078 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
1080 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1081 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1082 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1083 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
1084 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1085 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
1087 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1088 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1089 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1090 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
1091 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
1092 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1105 A1
* getA1() {return this;}
1114 A1
* getA1() {return this;}
1115 A2
* getA2() {return this;}
1124 A1
* getA1() {return this;}
1125 A2
* getA2() {return this;}
1126 A3
* getA3() {return this;}
1134 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1135 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1136 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
1137 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
1138 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA1());
1139 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
1141 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1142 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
1143 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1144 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
1145 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1146 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
1148 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1149 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1150 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1151 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
1152 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
1153 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1166 A1
* getA1() {return this;}
1175 A1
* getA1() {return this;}
1176 A2
* getA2() {return this;}
1185 A2
* getA2() {return this;}
1186 A3
* getA3() {return this;}
1194 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1195 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1196 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
1198 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1199 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1200 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1201 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
1202 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1203 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
1205 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1206 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1207 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1208 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
1209 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
1210 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1223 A1
* getA1() {return this;}
1227 : protected virtual A1
1232 A1
* getA1() {return this;}
1233 A2
* getA2() {return this;}
1242 A2
* getA2() {return this;}
1243 A3
* getA3() {return this;}
1251 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1252 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1253 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
1255 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1256 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1257 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1258 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
1259 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1260 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
1262 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1263 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1264 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1265 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
1266 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
1267 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1280 A1
* getA1() {return this;}
1289 A1
* getA1() {return this;}
1290 A2
* getA2() {return this;}
1299 t23::A1
* getA1() {return A2::getA1();}
1300 A2
* getA2() {return this;}
1301 A3
* getA3() {return this;}
1309 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1310 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1311 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
1313 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1314 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1315 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1316 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
1317 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1319 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1320 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1321 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1322 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
1323 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
1324 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1337 A1
* getA1() {return this;}
1341 : protected virtual A1
1346 A1
* getA1() {return this;}
1347 A2
* getA2() {return this;}
1356 t24::A1
* getA1() {return A2::getA1();}
1357 A2
* getA2() {return this;}
1358 A3
* getA3() {return this;}
1366 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1367 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1368 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
1370 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1371 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1372 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1373 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
1374 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1376 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1377 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1378 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1379 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
1380 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
1381 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1394 A1
* getA1() {return this;}
1398 : protected virtual A1
1403 A1
* getA1() {return this;}
1404 A2
* getA2() {return this;}
1408 : private virtual A2
1413 t25::A1
* getA1() {return A2::getA1();}
1414 A2
* getA2() {return this;}
1415 A3
* getA3() {return this;}
1423 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1424 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1425 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
1427 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1428 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1429 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1430 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
1431 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1433 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1434 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1435 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1436 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
1437 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
1438 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1461 A1
* getA1() {return this;}
1470 A1
* getA1() {return this;}
1471 A2
* getA2() {return this;}
1481 A1
* getA12() {return A2::getA1();}
1482 A2
* getA2() {return this;}
1483 A3
* getA3() {return this;}
1491 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1492 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1493 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
1494 assert(dynamic_cast<A1
*>(a3
.getA12()) == a3
.getA12());
1495 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA12());
1497 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1498 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
1499 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1500 assert(dynamic_cast<A2
*>(a3
.getA12()) == a3
.getA2());
1501 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1502 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
1504 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1505 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1506 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1507 assert(dynamic_cast<A3
*>(a3
.getA12()) == a3
.getA3());
1508 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
1509 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1522 A1
* getA1() {return this;}
1531 A1
* getA1() {return this;}
1532 A2
* getA2() {return this;}
1542 A1
* getA12() {return A2::getA1();}
1543 A2
* getA2() {return this;}
1544 A3
* getA3() {return this;}
1552 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1553 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1554 assert(dynamic_cast<A1
*>(a3
.getA12()) == a3
.getA12());
1556 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1557 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1558 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1559 assert(dynamic_cast<A2
*>(a3
.getA12()) == 0);
1560 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1561 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
1563 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1564 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1565 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1566 assert(dynamic_cast<A3
*>(a3
.getA12()) == 0);
1567 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
1568 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1581 A1
* getA1() {return this;}
1590 A1
* getA1() {return this;}
1591 A2
* getA2() {return this;}
1601 A1
* getA12() {return A2::getA1();}
1602 A2
* getA2() {return this;}
1603 A3
* getA3() {return this;}
1611 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1612 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1613 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
1614 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA12());
1616 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1617 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
1618 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1619 assert(dynamic_cast<A2
*>(a3
.getA12()) == a3
.getA2());
1620 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1621 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
1623 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1624 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1625 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1626 assert(dynamic_cast<A3
*>(a3
.getA12()) == a3
.getA3());
1627 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
1628 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1641 A1
* getA1() {return this;}
1650 A1
* getA1() {return this;}
1651 A2
* getA2() {return this;}
1661 A1
* getA12() {return A2::getA1();}
1662 A2
* getA2() {return this;}
1663 A3
* getA3() {return this;}
1671 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1672 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1673 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
1674 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA12());
1676 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1677 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
1678 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1679 assert(dynamic_cast<A2
*>(a3
.getA12()) == a3
.getA2());
1680 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1682 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1683 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1684 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1685 assert(dynamic_cast<A3
*>(a3
.getA12()) == 0);
1686 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
1687 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1700 A1
* getA1() {return this;}
1709 A1
* getA1() {return this;}
1710 A2
* getA2() {return this;}
1720 A1
* getA12() {return A2::getA1();}
1721 A2
* getA2() {return this;}
1722 A3
* getA3() {return this;}
1730 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1731 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1732 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
1733 assert(dynamic_cast<A1
*>(a3
.getA12()) == a3
.getA12());
1734 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA12());
1736 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1737 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
1738 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1739 assert(dynamic_cast<A2
*>(a3
.getA12()) == a3
.getA2());
1740 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1742 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1743 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1744 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1745 assert(dynamic_cast<A3
*>(a3
.getA12()) == 0);
1746 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
1747 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1760 A1
* getA1() {return this;}
1769 A1
* getA1() {return this;}
1770 A2
* getA2() {return this;}
1780 A1
* getA12() {return A2::getA1();}
1781 A2
* getA2() {return this;}
1782 A3
* getA3() {return this;}
1790 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1791 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1792 assert(dynamic_cast<A1
*>(a3
.getA12()) == a3
.getA12());
1794 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1795 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1796 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1797 assert(dynamic_cast<A2
*>(a3
.getA12()) == 0);
1798 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1800 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1801 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1802 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1803 assert(dynamic_cast<A3
*>(a3
.getA12()) == 0);
1804 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
1805 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1818 A1
* getA1() {return this;}
1827 A1
* getA1() {return this;}
1828 A2
* getA2() {return this;}
1838 A1
* getA12() {return A2::getA1();}
1839 A2
* getA2() {return this;}
1840 A3
* getA3() {return this;}
1848 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1849 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1850 assert(dynamic_cast<A1
*>(a3
.getA12()) == a3
.getA12());
1852 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1853 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1854 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1855 assert(dynamic_cast<A2
*>(a3
.getA12()) == 0);
1856 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1858 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1859 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1860 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1861 assert(dynamic_cast<A3
*>(a3
.getA12()) == 0);
1862 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
1863 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1876 A1
* getA1() {return this;}
1885 A1
* getA1() {return this;}
1886 A2
* getA2() {return this;}
1896 A1
* getA12() {return A2::getA1();}
1897 A2
* getA2() {return this;}
1898 A3
* getA3() {return this;}
1906 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1907 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1908 assert(dynamic_cast<A1
*>(a3
.getA12()) == a3
.getA12());
1910 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1911 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
1912 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1913 assert(dynamic_cast<A2
*>(a3
.getA12()) == 0);
1914 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1916 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1917 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1918 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1919 assert(dynamic_cast<A3
*>(a3
.getA12()) == 0);
1920 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
1921 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
1944 A1
* getA1() {return this;}
1953 A1
* getA1() {return this;}
1954 A2
* getA2() {return this;}
1958 : public virtual A1
,
1964 A1
* getA1() {return A1::getA1();}
1965 A2
* getA2() {return this;}
1966 A3
* getA3() {return this;}
1974 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
1975 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
1976 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
1977 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
1978 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA1());
1979 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
1981 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
1982 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
1983 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
1984 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
1985 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
1986 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
1988 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
1989 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
1990 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
1991 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
1992 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
1993 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
2006 A1
* getA1() {return this;}
2010 : private virtual A1
2015 A1
* getA1() {return this;}
2016 A2
* getA2() {return this;}
2020 : public virtual A1
,
2026 A1
* getA1() {return A1::getA1();}
2027 A2
* getA2() {return this;}
2028 A3
* getA3() {return this;}
2036 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
2037 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
2038 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
2039 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
2041 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
2042 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
2043 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
2044 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
2045 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
2046 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
2048 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
2049 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
2050 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
2051 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
2052 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
2053 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
2066 A1
* getA1() {return this;}
2075 A1
* getA1() {return this;}
2076 A2
* getA2() {return this;}
2080 : private virtual A1
,
2086 A1
* getA1() {return A1::getA1();}
2087 A2
* getA2() {return this;}
2088 A3
* getA3() {return this;}
2096 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
2097 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
2098 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
2099 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
2100 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA1());
2101 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
2103 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
2104 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
2105 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
2106 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
2107 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
2108 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
2110 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
2111 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
2112 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
2113 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
2114 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
2115 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
2128 A1
* getA1() {return this;}
2137 A1
* getA1() {return this;}
2138 A2
* getA2() {return this;}
2142 : public virtual A1
,
2148 A1
* getA1() {return A1::getA1();}
2149 A2
* getA2() {return this;}
2150 A3
* getA3() {return this;}
2158 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
2159 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
2160 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
2161 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
2162 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA1());
2163 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
2165 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
2166 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
2167 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
2168 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
2169 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
2171 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
2172 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
2173 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
2174 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
2175 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
2176 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
2189 A1
* getA1() {return this;}
2198 A1
* getA1() {return this;}
2199 A2
* getA2() {return this;}
2203 : private virtual A1
,
2209 A1
* getA1() {return A1::getA1();}
2210 A2
* getA2() {return this;}
2211 A3
* getA3() {return this;}
2219 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
2220 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
2221 assert(dynamic_cast<A1
*>(a2
.getA2()) == a2
.getA1());
2222 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
2223 assert(dynamic_cast<A1
*>(a3
.getA2()) == a3
.getA1());
2225 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
2226 assert(dynamic_cast<A2
*>(a2
.getA1()) == a2
.getA2());
2227 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
2228 assert(dynamic_cast<A2
*>(a3
.getA1()) == a3
.getA2());
2229 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
2231 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
2232 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
2233 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
2234 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
2235 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
2236 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
2249 A1
* getA1() {return this;}
2253 : private virtual A1
2258 A1
* getA1() {return this;}
2259 A2
* getA2() {return this;}
2263 : public virtual A1
,
2269 A1
* getA1() {return A1::getA1();}
2270 A2
* getA2() {return this;}
2271 A3
* getA3() {return this;}
2279 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
2280 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
2281 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
2282 assert(dynamic_cast<A1
*>(a3
.getA3()) == a3
.getA1());
2284 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
2285 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
2286 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
2287 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
2288 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
2290 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
2291 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
2292 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
2293 assert(dynamic_cast<A3
*>(a3
.getA1()) == a3
.getA3());
2294 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
2295 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
2308 A1
* getA1() {return this;}
2312 : private virtual A1
2317 A1
* getA1() {return this;}
2318 A2
* getA2() {return this;}
2322 : private virtual A1
,
2328 A1
* getA1() {return A1::getA1();}
2329 A2
* getA2() {return this;}
2330 A3
* getA3() {return this;}
2338 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
2339 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
2340 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
2342 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
2343 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
2344 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
2345 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
2346 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
2347 assert(dynamic_cast<A2
*>(a3
.getA3()) == a3
.getA2());
2349 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
2350 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
2351 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
2352 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
2353 assert(dynamic_cast<A3
*>(a3
.getA2()) == a3
.getA3());
2354 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
2367 A1
* getA1() {return this;}
2371 : private virtual A1
2376 A1
* getA1() {return this;}
2377 A2
* getA2() {return this;}
2381 : private virtual A1
,
2387 A1
* getA1() {return A1::getA1();}
2388 A2
* getA2() {return this;}
2389 A3
* getA3() {return this;}
2397 assert(dynamic_cast<A1
*>(a1
.getA1()) == a1
.getA1());
2398 assert(dynamic_cast<A1
*>(a2
.getA1()) == a2
.getA1());
2399 assert(dynamic_cast<A1
*>(a3
.getA1()) == a3
.getA1());
2401 assert(dynamic_cast<A2
*>(a1
.getA1()) == 0);
2402 assert(dynamic_cast<A2
*>(a2
.getA1()) == 0);
2403 assert(dynamic_cast<A2
*>(a2
.getA2()) == a2
.getA2());
2404 assert(dynamic_cast<A2
*>(a3
.getA1()) == 0);
2405 assert(dynamic_cast<A2
*>(a3
.getA2()) == a3
.getA2());
2407 assert(dynamic_cast<A3
*>(a1
.getA1()) == 0);
2408 assert(dynamic_cast<A3
*>(a2
.getA1()) == 0);
2409 assert(dynamic_cast<A3
*>(a2
.getA2()) == 0);
2410 assert(dynamic_cast<A3
*>(a3
.getA1()) == 0);
2411 assert(dynamic_cast<A3
*>(a3
.getA2()) == 0);
2412 assert(dynamic_cast<A3
*>(a3
.getA3()) == a3
.getA3());
2417 int main(int, char**)