1// { dg-do assemble  }
2// PRMS ID: 7507
3
4/* ------------------------------------------------------------ */
5
6class Base0
7{
8public:
9				Base0() {}
10      virtual			~Base0() {}
11};
12
13class Base1
14{
15public:
16				Base1() {}
17    virtual			~Base1() {}
18};
19
20class Derived : public Base0, public Base1
21{
22public:
23				Derived() {}
24  virtual			~Derived() {}
25};
26
27/* ------------------------------------------------------------ */
28
29class Dummy
30{
31  public:
32				Dummy(Base0 * theBase) {}
33				~Dummy() {}
34};
35
36/* ------------------------------------------------------------ */
37
38template<class T>
39class ConstSmartPtr
40{
41  T*			myItem;		// private
42
43  public:
44			ConstSmartPtr(T const* theItem);
45
46			operator T const*() const
47				{ return myItem; }
48  protected:
49    T*			_item() const
50				{ return myItem; }
51};
52
53template<class T>
54class SmartPtr : public ConstSmartPtr<T>
55{
56  public:
57			SmartPtr(T* theItem)
58			  : ConstSmartPtr<T>(theItem) {}
59
60    T*			item() const
61				{ return this->_item(); }
62
63			operator T*() const
64				{ return this->_item(); }
65};
66
67/* ------------------------------------------------------------ */
68
69void
70function()
71{
72  SmartPtr<Derived>  myObj = new Derived();
73
74  Dummy th1(myObj);		    // Doesn't work under Cygnus
75  Dummy th2((Base0 *) myObj);	    // Doesn't work either
76}
77
78/* ------------------------------------------------------------ */
79