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