1// 2002-05-13 2 3enum region { oriental, egyptian, greek, etruscan, roman }; 4 5// Test one. 6class gnu_obj_1 7{ 8protected: 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 16public: 17 gnu_obj_1(antiquities a, long l) {} 18}; 19 20const bool gnu_obj_1::test; 21const int gnu_obj_1::key1; 22long gnu_obj_1::key2 = 77; 23gnu_obj_1::antiquities gnu_obj_1::value = oriental; 24 25 26// Test two. 27template<typename T> 28class gnu_obj_2: public virtual gnu_obj_1 29{ 30public: 31 static antiquities value_derived; 32 33public: 34 gnu_obj_2(antiquities b): gnu_obj_1(oriental, 7) { } 35}; 36 37template<typename T> 38typename gnu_obj_2<T>::antiquities gnu_obj_2<T>::value_derived = etruscan; 39 40// Test three. 41template<typename T> 42class gnu_obj_3 43{ 44public: 45 typedef region antiquities; 46 static gnu_obj_2<int> data; 47 48public: 49 gnu_obj_3(antiquities b) { } 50}; 51 52template<typename T> 53gnu_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 60template class gnu_obj_2<int>; 61template class gnu_obj_2<long>; 62template class gnu_obj_3<long>; 63 64int 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 test4.dummy = 0; 72 return test4.dummy; // breakpoint: constructs-done 73} 74