// { dg-do run  }
// GROUPS passed overloading
extern "C" int printf (const char *, ...);

struct NoName {
        
        int first;
        int second;
};

class Casted {

  public:

        NoName  x;
        double  y;

        Casted ( int _x , double _y ): y(_y) 
        { 
                x.first = _x;
                x.second = _x*2;
        }
        
        operator NoName() const { return x; }
        operator double() const { return y; }
};

int main()
{
        Casted c(10,12.34);

        NoName x;
        double y;

        x = c;
        y = c;

	if (x.first == 10 && x.second == 20 && y == 12.34)
	  printf ("PASS\n");
	else
	  { printf ("FAIL\n"); return 1; }
}
