#include <iostream>
using namespace std;
int trw(int i)
{ cout<<endl<<"trwing int="<<i;
throw (i);
return i;
}
struct mm
{ ~mm(){cout<<endl<<"deleting mm="<<x;}
explicit mm(int y ):x(y ){cout<<endl<<"constructing mm="<<x;}
mm(const mm& m):x(m.x){cout<<endl<<"copying m.x=m."<<x;}
mm& operator=(const mm& m){x=m.x; cout<<endl<<"assigning m."<<x; return *this;}
mm& operator=(const int y){x=y; cout<<endl<<"assigning y" <<x; return *this;}
int x;
};
struct tr
{ mm a,b;
tr():a(1),b(2) // tr() throw from constr body
{ cout<<endl<<"constructing tr()";
trw(1);}
tr(int):a(3),b(trw(4)) {cout<<endl<<"constructing tr(int)";} // throw from constr init list
tr(bool):a(5),b(6){cout<<endl<<"constructing tr(bool)";}
~tr(){cout<<endl<<"deleting tr: a="<<a.x<<" and b="<<b.x;}
};
int main()
{
try{ tr d; }
catch (int x){cout<<endl<<"int="<<x<<" ex. in tr()";}
try{ tr c(4); }
catch (int x){cout<<endl<<"int="<<x<<" ex.in tr(int)";}
tr(true);
mm a(7);
mm b=mm(8);
mm c(a);
b=c;
mm e=9;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgdHJ3KGludCBpKQp7ICAgY291dDw8ZW5kbDw8InRyd2luZyBpbnQ9Ijw8aTsKICAgIHRocm93IChpKTsKICAgcmV0dXJuIGk7Cn0Kc3RydWN0IG1tIAp7ICB+bW0oKXtjb3V0PDxlbmRsPDwiZGVsZXRpbmcgbW09Ijw8eDt9CiAgIGV4cGxpY2l0IG1tKGludCB5ICAgICAgKTp4KHkgICl7Y291dDw8ZW5kbDw8ImNvbnN0cnVjdGluZyBtbT0iPDx4O30KICAgICAgICAgICAgbW0oY29uc3QgbW0mIG0pOngobS54KXtjb3V0PDxlbmRsPDwiY29weWluZyBtLng9bS4iPDx4O30KICAgbW0mIG9wZXJhdG9yPShjb25zdCBtbSYgbSl7eD1tLng7IGNvdXQ8PGVuZGw8PCJhc3NpZ25pbmcgbS4iPDx4OyByZXR1cm4gKnRoaXM7fQogICBtbSYgb3BlcmF0b3I9KGNvbnN0IGludCB5KXt4PXk7ICAgY291dDw8ZW5kbDw8ImFzc2lnbmluZyB5IiA8PHg7IHJldHVybiAqdGhpczt9CgogICBpbnQgeDsKfTsKc3RydWN0IHRyCnsgICBtbSBhLGI7CiAgICB0cigpOmEoMSksYigyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHIoKSB0aHJvdyBmcm9tIGNvbnN0ciBib2R5CiAgICAgICAgICB7ICAgY291dDw8ZW5kbDw8ImNvbnN0cnVjdGluZyB0cigpIjsKICAgICAgICAgICAgICB0cncoMSk7fSAgICAgIAogICAgICAgICAgICAgIAogICAgdHIoaW50KTphKDMpLGIodHJ3KDQpKSB7Y291dDw8ZW5kbDw8ImNvbnN0cnVjdGluZyB0cihpbnQpIjt9IC8vIHRocm93IGZyb20gY29uc3RyIGluaXQgbGlzdAogICAgdHIoYm9vbCk6YSg1KSxiKDYpe2NvdXQ8PGVuZGw8PCJjb25zdHJ1Y3RpbmcgdHIoYm9vbCkiO30KICAgfnRyKCl7Y291dDw8ZW5kbDw8ImRlbGV0aW5nIHRyOiBhPSI8PGEueDw8IiBhbmQgYj0iPDxiLng7fQp9OwoKaW50IG1haW4oKSAKewoJdHJ5eyAgICB0ciBkOyAgIAl9CiAgICBjYXRjaCAoaW50IHgpe2NvdXQ8PGVuZGw8PCJpbnQ9Ijw8eDw8IiBleC4gaW4gdHIoKSI7fQogICAgCiAgICB0cnl7ICAgIHRyIGMoNCk7ICAgIH0KICAgIGNhdGNoIChpbnQgeCl7Y291dDw8ZW5kbDw8ImludD0iPDx4PDwiIGV4LmluIHRyKGludCkiO30KICAgIAogICAgdHIodHJ1ZSk7CiAgICAKICAgIG1tIGEoNyk7CiAgICBtbSBiPW1tKDgpOwogICAgbW0gYyhhKTsKICAgIGI9YzsKICAgIG1tIGU9OTsKCXJldHVybiAwOwp9