190075Sobrien// 2002-05-13 290075Sobrien 390075Sobrienenum region { oriental, egyptian, greek, etruscan, roman }; 490075Sobrien 590075Sobrien// Test one. 690075Sobrienclass gnu_obj_1 790075Sobrien{ 890075Sobrienprotected: 990075Sobrien typedef region antiquities; 1090075Sobrien static const bool test = true; 1190075Sobrien static const int key1 = 5; 1290075Sobrien static long key2; 1390075Sobrien 1490075Sobrien static antiquities value; 1590075Sobrien 1690075Sobrienpublic: 1790075Sobrien gnu_obj_1(antiquities a, long l) {} 18169689Skan}; 19169689Skan 2090075Sobrienconst bool gnu_obj_1::test; 2190075Sobrienconst int gnu_obj_1::key1; 2290075Sobrienlong gnu_obj_1::key2 = 77; 23169689Skangnu_obj_1::antiquities gnu_obj_1::value = oriental; 24169689Skan 25169689Skan 26169689Skan// Test two. 27169689Skantemplate<typename T> 2890075Sobrienclass gnu_obj_2: public virtual gnu_obj_1 2990075Sobrien{ 3090075Sobrienpublic: 3190075Sobrien static antiquities value_derived; 3290075Sobrien 3390075Sobrienpublic: 3490075Sobrien gnu_obj_2(antiquities b): gnu_obj_1(oriental, 7) { } 3590075Sobrien}; 3690075Sobrien 3790075Sobrientemplate<typename T> 3890075Sobrientypename gnu_obj_2<T>::antiquities gnu_obj_2<T>::value_derived = etruscan; 3990075Sobrien 4090075Sobrien// Test three. 4190075Sobrientemplate<typename T> 4290075Sobrienclass gnu_obj_3 4390075Sobrien{ 4490075Sobrienpublic: 4590075Sobrien typedef region antiquities; 4690075Sobrien static gnu_obj_2<int> data; 4790075Sobrien 4890075Sobrienpublic: 4990075Sobrien gnu_obj_3(antiquities b) { } 5090075Sobrien}; 5190075Sobrien 5290075Sobrientemplate<typename T> 5390075Sobriengnu_obj_2<int> gnu_obj_3<T>::data(etruscan); 5490075Sobrien 5590075Sobrien// 2002-08-16 5690075Sobrien// Test four. 5790075Sobrien#include "m-static.h" 5890075Sobrien 5990075Sobrien// instantiate templates explicitly so their static members will exist 6090075Sobrientemplate class gnu_obj_2<int>; 61169689Skantemplate class gnu_obj_2<long>; 62169689Skantemplate class gnu_obj_3<long>; 6390075Sobrien 6490075Sobrienint main() 6590075Sobrien{ 6690075Sobrien gnu_obj_1 test1(egyptian, 4589); 6790075Sobrien gnu_obj_2<long> test2(roman); 6890075Sobrien gnu_obj_3<long> test3(greek); 69169689Skan gnu_obj_4 test4; 70169689Skan 7190075Sobrien return 0; // breakpoint: constructs-done 7290075Sobrien} 7390075Sobrien