|
|
1.1 root 1: #include "check.h"
2:
3:
4: /* Compilation tests */
5:
6:
7: // There is some trickiness involved in cfront in dealing with member
8: // initializations, so check it.
9: class f ;
10:
11: template <class T> class c {
12: public:
13: const T f ;
14: c() ;
15: } ;
16:
17: template <class T> c<T>::c() : f(1) {}
18:
19: c<int> x ;
20:
21:
22: // should able to define a class with a name that is identical to a type
23: // formal, they are in different scopes
24: class T {
25: } ;
26: T t1 ;
27:
28:
29:
30: // it is ok to reference an as yet incomplete template class
31: template <class T> class t {
32: public:
33: T m ;
34: // references to an as yet incompletely defined template are ok
35: t<double> * d ;
36:
37: t() {}
38: } ;
39:
40: t<int> tv ;
41:
42:
43: // check forward declarations of a template class
44:
45: template <class T> class forward ;
46:
47:
48: template <class T> class backward {
49: public:
50: T mem ;
51:
52: backward() { mem = 1.0 ; }
53: } ;
54:
55: // shouldn't have any impact on the earlier template definition.
56: template <class T> class backward ;
57:
58:
59: class X {
60: public:
61: forward<int> * p ;
62: backward<double> *pb ;
63:
64: X() ;
65: } ;
66:
67:
68: template <class T> class forward {
69: public:
70: T mem ;
71:
72: forward() { mem = 2 ; }
73: } ;
74:
75:
76: template <class T> class forward ;
77:
78: X::X() {
79: p = new forward<int> ; pb = new backward<double> ;
80: check((p->mem == 2) && (pb->mem == 1.0)) ;
81: }
82:
83: X xv ;
84:
85:
86:
87: main () {
88: start_test(__FILE__) ;
89: check(x.f == 1) ;
90:
91: end_test() ;
92: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.