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  const bool 		test;
11  const int 		key1;
12  long       		key2;
13
14  antiquities 	value;
15
16public:
17  gnu_obj_1(antiquities a, long l): test(true), key1(5), key2(l), value(a) {}
18};
19
20// Test two.
21template<typename T>
22class gnu_obj_2: public virtual gnu_obj_1
23{
24protected:
25  antiquities	value_derived;
26
27public:
28  gnu_obj_2(antiquities b): gnu_obj_1(oriental, 7), value_derived(b) { }
29};
30
31// Test three.
32template<typename T>
33class gnu_obj_3
34{
35protected:
36  typedef region antiquities;
37  gnu_obj_2<int>   	data;
38
39public:
40  gnu_obj_3(antiquities b): data(etruscan) { }
41};
42
43int shadow = 0;
44
45class C
46{
47public:
48  C (int x) : shadow (x) {}
49  void marker () {}
50private:
51  int shadow;
52};
53
54int main()
55{
56  gnu_obj_1		test1(egyptian, 4589);
57  gnu_obj_2<long>	test2(roman);
58  gnu_obj_3<long>	test3(greek);
59
60  C theC (1);				// breakpoint: first-constructs-done
61  theC.marker ();
62
63  return 0;
64}
65