xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.cp/m-static.cc (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
1*b725ae77Skettenis // 2002-05-13
2*b725ae77Skettenis 
3*b725ae77Skettenis enum region { oriental, egyptian, greek, etruscan, roman };
4*b725ae77Skettenis 
5*b725ae77Skettenis // Test one.
6*b725ae77Skettenis class gnu_obj_1
7*b725ae77Skettenis {
8*b725ae77Skettenis protected:
9*b725ae77Skettenis   typedef region antiquities;
10*b725ae77Skettenis   static const bool 	test = true;
11*b725ae77Skettenis   static const int 	key1 = 5;
12*b725ae77Skettenis   static long       	key2;
13*b725ae77Skettenis 
14*b725ae77Skettenis   static antiquities 	value;
15*b725ae77Skettenis 
16*b725ae77Skettenis public:
gnu_obj_1(antiquities a,long l)17*b725ae77Skettenis   gnu_obj_1(antiquities a, long l) {}
18*b725ae77Skettenis };
19*b725ae77Skettenis 
20*b725ae77Skettenis const bool gnu_obj_1::test;
21*b725ae77Skettenis const int gnu_obj_1::key1;
22*b725ae77Skettenis long gnu_obj_1::key2 = 77;
23*b725ae77Skettenis gnu_obj_1::antiquities gnu_obj_1::value = oriental;
24*b725ae77Skettenis 
25*b725ae77Skettenis 
26*b725ae77Skettenis // Test two.
27*b725ae77Skettenis template<typename T>
28*b725ae77Skettenis class gnu_obj_2: public virtual gnu_obj_1
29*b725ae77Skettenis {
30*b725ae77Skettenis public:
31*b725ae77Skettenis   static antiquities	value_derived;
32*b725ae77Skettenis 
33*b725ae77Skettenis public:
gnu_obj_2(antiquities b)34*b725ae77Skettenis   gnu_obj_2(antiquities b): gnu_obj_1(oriental, 7) { }
35*b725ae77Skettenis };
36*b725ae77Skettenis 
37*b725ae77Skettenis template<typename T>
38*b725ae77Skettenis typename gnu_obj_2<T>::antiquities gnu_obj_2<T>::value_derived = etruscan;
39*b725ae77Skettenis 
40*b725ae77Skettenis // Test three.
41*b725ae77Skettenis template<typename T>
42*b725ae77Skettenis class gnu_obj_3
43*b725ae77Skettenis {
44*b725ae77Skettenis public:
45*b725ae77Skettenis   typedef region antiquities;
46*b725ae77Skettenis   static gnu_obj_2<int> data;
47*b725ae77Skettenis 
48*b725ae77Skettenis public:
gnu_obj_3(antiquities b)49*b725ae77Skettenis   gnu_obj_3(antiquities b) { }
50*b725ae77Skettenis };
51*b725ae77Skettenis 
52*b725ae77Skettenis template<typename T>
53*b725ae77Skettenis gnu_obj_2<int> gnu_obj_3<T>::data(etruscan);
54*b725ae77Skettenis 
55*b725ae77Skettenis // 2002-08-16
56*b725ae77Skettenis // Test four.
57*b725ae77Skettenis #include "m-static.h"
58*b725ae77Skettenis 
59*b725ae77Skettenis // instantiate templates explicitly so their static members will exist
60*b725ae77Skettenis template class gnu_obj_2<int>;
61*b725ae77Skettenis template class gnu_obj_2<long>;
62*b725ae77Skettenis template class gnu_obj_3<long>;
63*b725ae77Skettenis 
main()64*b725ae77Skettenis int main()
65*b725ae77Skettenis {
66*b725ae77Skettenis   gnu_obj_1		test1(egyptian, 4589);
67*b725ae77Skettenis   gnu_obj_2<long>	test2(roman);
68*b725ae77Skettenis   gnu_obj_3<long>	test3(greek);
69*b725ae77Skettenis   gnu_obj_4		test4;
70*b725ae77Skettenis 
71*b725ae77Skettenis   return 0;				// breakpoint: constructs-done
72*b725ae77Skettenis }
73