| // 2002-05-13 |
| |
| enum region { oriental, egyptian, greek, etruscan, roman }; |
| |
| void keepalive(bool *var) { } |
| void keepalive_int (int *var) { } |
| |
| // Test one. |
| class gnu_obj_1 |
| { |
| protected: |
| typedef region antiquities; |
| static const bool test = true; |
| static const int key1 = 5; |
| static long key2; |
| |
| static antiquities value; |
| |
| public: |
| gnu_obj_1(antiquities a, long l) {} |
| ~gnu_obj_1() {} |
| |
| long method () |
| { |
| static int sintvar = 4; |
| static bool svar = true; |
| |
| keepalive (&svar); |
| keepalive_int (&sintvar); |
| return key2; |
| } |
| }; |
| |
| // An object with a single constructor. |
| class single_constructor |
| { |
| public: |
| single_constructor () { } |
| ~single_constructor () { } |
| }; |
| |
| const bool gnu_obj_1::test; |
| const int gnu_obj_1::key1; |
| long gnu_obj_1::key2 = 77; |
| gnu_obj_1::antiquities gnu_obj_1::value = oriental; |
| |
| |
| // Test two. |
| template<typename T> |
| class gnu_obj_2: public virtual gnu_obj_1 |
| { |
| public: |
| static antiquities value_derived; |
| |
| public: |
| gnu_obj_2(antiquities b): gnu_obj_1(oriental, 7) { } |
| }; |
| |
| template<typename T> |
| typename gnu_obj_2<T>::antiquities gnu_obj_2<T>::value_derived = etruscan; |
| |
| // Test three. |
| template<typename T> |
| class gnu_obj_3 |
| { |
| public: |
| typedef region antiquities; |
| static gnu_obj_2<int> data; |
| |
| public: |
| gnu_obj_3(antiquities b) { } |
| }; |
| |
| template<typename T> |
| gnu_obj_2<int> gnu_obj_3<T>::data(etruscan); |
| |
| // 2002-08-16 |
| // Test four. |
| #include "m-static.h" |
| |
| // instantiate templates explicitly so their static members will exist |
| template class gnu_obj_2<int>; |
| template class gnu_obj_2<long>; |
| template class gnu_obj_3<long>; |
| |
| int main() |
| { |
| gnu_obj_1 test1(egyptian, 4589); |
| gnu_obj_2<long> test2(roman); |
| gnu_obj_3<long> test3(greek); |
| gnu_obj_4 test4; |
| single_constructor test5; |
| |
| test4.dummy = test4.elsewhere; |
| test4.dummy = 0; |
| |
| test1.method (); // breakpoint: constructs-done |
| |
| return test4.dummy; |
| } |