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*b725ae77Skettenisint 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