#include <iostream>
using namespace std;
class B;
class A
{
public:
A(int ax):x(ax) {}
A* Clone() const
{
return new A(x);
}
/*
B operator + (A const &v2) const
{
A *pv=v2.Clone();
pv->x+=x;
return B(pv);
}
*/
friend ostream& operator << (ostream &os, A const &v); /*
{
os << v.x;
return os;
}*/
protected:
int x;
};
ostream& operator << (ostream &os, A const &v)
{
os << v.x;
return os;
}
class B
{
public:
B (A *p);
~B();
operator A const () const;
operator A ();
private:
A *y;
};
B::B (A *p):y(p) {}
B::~B() {delete y;}
B::operator A const () const {return *y;}
B::operator A () {return *y;}
int main()
{
A v(4),v1(5);
B b(&v);
cout << b;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQjsKY2xhc3MgQQp7CiAgICBwdWJsaWM6CiAgICAgICAgQShpbnQgYXgpOngoYXgpIHt9CiAgICAgICAgQSogQ2xvbmUoKSBjb25zdCAKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQSh4KTsKICAgICAgICB9IAogICAgICAgIC8qCiAgICAgICAgQiBvcGVyYXRvciArIChBIGNvbnN0ICZ2MikgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIEEgKnB2PXYyLkNsb25lKCk7CiAgICAgICAgICAgIHB2LT54Kz14OwogICAgICAgICAgICByZXR1cm4gQihwdik7CiAgICAgICAgfQogICAgICAgICovCiAgICAgICAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yIDw8IChvc3RyZWFtICZvcywgQSBjb25zdCAmdik7IC8qCiAgICAgICAgewogICAgICAgICAgICBvcyA8PCB2Lng7CiAgICAgICAgICAgIHJldHVybiBvczsgCiAgICAgICAgfSovCiAgICBwcm90ZWN0ZWQ6CiAgICAgICAgaW50IHg7Cn07Cgpvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0cmVhbSAmb3MsIEEgY29uc3QgJnYpCnsKICAgIG9zIDw8IHYueDsKICAgIHJldHVybiBvczsgCn0KCgpjbGFzcyBCCnsKICAgIHB1YmxpYzoKICAgICAgICBCIChBICpwKTsKICAgICAgICB+QigpOwogICAgICAgIG9wZXJhdG9yIEEgY29uc3QgKCkgY29uc3Q7CiAgICAgICAgb3BlcmF0b3IgQSAoKTsKICAgIHByaXZhdGU6CiAgICAgICAgQSAqeTsKfTsKCgpCOjpCIChBICpwKTp5KHApIHt9CkI6On5CKCkge2RlbGV0ZSB5O30gCkI6Om9wZXJhdG9yIEEgY29uc3QgKCkgY29uc3Qge3JldHVybiAqeTt9CkI6Om9wZXJhdG9yIEEgKCkge3JldHVybiAqeTt9CgppbnQgbWFpbigpCnsKICAgIEEgdig0KSx2MSg1KTsKICAgIEIgYigmdik7CiAgICBjb3V0IDw8IGI7Cn0K