struct Char {
  char c;
  Char(char c):c(c){}
};

struct Int {
  int i;
  operator int& ();
  Int(int i):i(i){}
};

Int::operator int&() {return i;}

int  main()
{
   Int I1(1);
   int i1 = int(I1);
   assert(i1==1);


   Int I2(2);
   int i2 = (int&)I2;
   assert(i2==2);


   Int I3(3);
   int i3 =0;
   i3  = I3;
   assert(i3==3);

   Char C3(I3);
   assert(C3.c==3);
}
