// { dg-do assemble  }
// GROUPS passed assignment
class ccUnwind 
{
public:
    virtual ~ccUnwind (); // comment out virtual, and void diag changes
};

template<class T>
class ccHandle : public ccUnwind // similarly comment out inheritance
{   
public:
    ccHandle& operator = (const ccHandle& h);
};

class cc_Image;		 

class ccImage : public ccHandle<cc_Image>
{
public:
//  reversing the order of the next two lines changes the diagnostic
//  printed about the def of ccDisplay::image 
    ccImage    (const  ccImage  &);
    ccImage    (const  cc_Image &);
};

class ccDisplay 
{
public:
    ccImage img;
//ccImage image ( ccImage i) {img = i; return img;}
// above line  compiles 
    ccImage image ( ccImage i) { return img = i;} /* this gets void* error */
};



// vd.C: In method `class ccImage ccDisplay::image (class ccImage)':
// vd.C:31: bad argument 1 for function `ccImage::ccImage (const class cc_Image&)' (type was void *)
// vd.C:31: in base initialization for class `ccImage'
