|
|
1.1 root 1: /* Test nested instantiations in the presence of multiple base classes */
2:
3:
4: template <class p1, class p2> class b1 {
5: public:
6: p1 x1 ;
7: p2 y1 ;
8: void foo() ;
9: } ;
10:
11:
12: template <class p1, class p2> class b2 {
13: public:
14: p1 x2 ;
15: p2 y2 ;
16: void foo() ;
17: } ;
18:
19: template <class pd1, class pd2> class d :
20: public b1<pd1, pd2>, public b2<pd1, pd2> {
21: public:
22: pd1 *i ;
23: int check_i(pd1 test) ;
24: int check_x(pd1 test) ;
25: int check_y(pd2 test) ;
26: } ;
27:
28:
29: // Check access from within a member function
30: template <class pd1, class pd2> int d<pd1,pd2>::check_i(pd1 test) {
31: return (*i == test) ;
32: }
33:
34:
35: template <class pd1, class pd2> int d<pd1,pd2>::check_x(pd1 test) {
36: return ((x1 == test) && (x2 == test+1)) ;
37: }
38:
39:
40: template <class pd1, class pd2> int d<pd1,pd2>::check_y(pd2 test) {
41: return ((y1 == test) && (y2 == test+1)) ;
42: }
43:
44:
45:
46: #define check(p) if (!(p))printf("\nerror(%d): test failed at line %d",++error, __LINE__)
47:
48:
49: typedef char *pc ;
50: typedef int *pi ;
51:
52: extern "C" void printf(...) ;
53:
54: extern "C" void exit(int) ;
55:
56:
57: void end_test(int error)
58: {
59: printf ("\n*End Testing %s", __FILE__) ;
60: if (error)
61: printf (" *** %d errors ***\n", error) ;
62: else printf (" no errors detected\n") ;
63:
64: exit(error) ;
65: }
66:
67: main () {
68: printf ("\n*Begin Testing %s\n", __FILE__) ;
69: d<int, pc> v1 ;
70: int i ; char c ; int error = 0 ;
71:
72: v1.i = & i ;
73: v1.x1 = i ; v1.x2 = i + 1 ;
74: v1.y1 = & c ; v1.y2 = &c + 1 ;
75:
76: check (v1.i == & i) ;
77: check (v1.x1 == i) ;
78: check(v1.y1 == & c) ;
79:
80: check (v1.check_i (i)) ;
81: check (v1.check_x (i)) ;
82: check (v1.check_y (&c)) ;
83:
84: end_test(error) ;
85:
86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.