1 // { dg-do assemble  }
2 // GROUPS passed old-abort
3 // Should have been fixed by:
4 //
5 // Sun Jun 13 12:55:22 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)
6 //
7 // 	* cp-cvt.c (build_default_binary_type_conversion): Look deeper into
8 // 	what ARG1 and ARG2 are if they're POINTER_TYPEs.
9 
10 class CountableSet
11 {
12 	public:
~CountableSet()13 		virtual	~CountableSet() { }
14 };
15 
16 template<class T>
17 class FixedSet : virtual public CountableSet
18 {
19 	public:
20 		virtual	int Get(int, T&) = 0;
~FixedSet()21 		virtual	~FixedSet() { }
22 };
23 
24 class ShrinkableSet
25 {
26 	public:
27 		virtual int Remove(int) = 0;
28 };
29 
30 template<class T>
31 class PVSet : virtual public FixedSet<T>, virtual public ShrinkableSet
32 {
33 	public:
34 		virtual	void Append(const T&) = 0;
35 		virtual	void operator+=(const T& a) { Append(a); }
~PVSet()36 		virtual	~PVSet() { }
37 };
38 
39 template<class T>
40 class MutSet : virtual public FixedSet<T>, virtual public FixedSet<T *>
41 {
42 	protected:
43 		typedef	T	*Tp;
44 
45 	public:
Append(const Tp & tp)46 		void Append(const Tp& tp) { Append(*tp); }
47 
Access(int p)48 		T&	Access(int p)
49 		{
50 			Tp	tp;
51 			Get(p, tp);
52 			return *tp;
53 		}
~MutSet()54 		virtual	~MutSet() { }
55 };
56 
57 template <class T>
58 class	SimpleSet : virtual public MutSet<T>
59 {
60 	protected:
61 		T	*array;
62 		int	size;
63 
Allocate(int s)64 		virtual	void	Allocate(int s)
65 		{
66 			array = new T[s];
67 		}
68 	public:
SimpleSet()69 		SimpleSet()
70 		{
71 			size = 0;
72 			array = 0;
73 		}
Get(int p,T & t)74  		int	Get(int p, T& t)
75 		{
76 			t = array[p-1];
77 			return 1;
78 		}
Get(int p,T * & t)79 		int	Get(int p, T *& t)
80 		{
81 			t = &array[p-1];
82 			return 1;
83 		}
Append(const T & a)84 		inline void Append(const T& a)
85 		{
86 			array[size-1] = a;
87 		}
Remove(int n)88 		inline int Remove(int n) { return 0; }
89 };
90 
91 class	Dummy
92 {
93 	public:
Dummy()94 		Dummy()	{}
95 };
96 
97 int
main()98 main()
99 {
100 	SimpleSet<Dummy *>		bs1;
101 	int	i, j;
102 	Dummy	foo;
103 
104 	bs1+=&foo;// { dg-error "" }  no .*
105 }
106