// 2002-05-13

enum region { oriental, egyptian, greek, etruscan, roman };

// 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) {}
};

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;

  return 0;				// breakpoint: constructs-done
}
