#include <iostream>
#include <vector>
using namespace std;
class B{};
class C : public B{};
template <class T>
class A {
public:
A (){}
A(T * p) : ptr(p) {}
A & operator = ( A /*&*/ & p){
// swap (p.ptr, ptr ); return *this;
A temp;
// temp=p;
// temp.ptr=p.ptr;
//return temp;
temp.ptr=p.ptr;
p.ptr=ptr;
return p;
}
void pr(){cout<<*ptr<<endl;}
private:
T * ptr;
};
int main(){
int a=5;
int *p1=&a;
//A <B> pa2(new C);
A <int *> pa1 (new int *(p1 ));
// pa1.pr();
A<int> aob1(p1);
aob1.pr();
int b=6;
int *p2=&b;
A<int> aob2(p2);
aob2.pr();
aob2=aob1;
aob2.pr();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQnt9OwpjbGFzcyBDIDogcHVibGljIEJ7fTsKCnRlbXBsYXRlIDxjbGFzcyBUPgoKY2xhc3MgQSB7CiAgcHVibGljOgogICBBICgpe30KICAgQShUICogcCkgOiBwdHIocCkge30KICAgQSAmIG9wZXJhdG9yID0gKCBBIC8qJiovICYgcCl7CiAvLyAJc3dhcCAocC5wdHIsIHB0ciApOyAgcmV0dXJuICp0aGlzOwogCiAgQSB0ZW1wOwogIC8vIHRlbXA9cDsKIC8vIHRlbXAucHRyPXAucHRyOwoJIC8vcmV0dXJuIHRlbXA7CgkgdGVtcC5wdHI9cC5wdHI7CgkgcC5wdHI9cHRyOwoJIAoJIHJldHVybiBwOwp9CnZvaWQgcHIoKXtjb3V0PDwqcHRyPDxlbmRsO30KICAgcHJpdmF0ZToKICAgVCAqIHB0cjsKICAKfTsKCmludCBtYWluKCl7CiAgIGludCBhPTU7CiAgIGludCAqcDE9JmE7Ci8vQSA8Qj4gcGEyKG5ldyBDKTsKICAgQSA8aW50ICo+IHBhMSAobmV3IGludCAqKHAxICkpOwovLyBwYTEucHIoKTsKICAgQTxpbnQ+IGFvYjEocDEpOwogICBhb2IxLnByKCk7CiAKICAgaW50IGI9NjsKICAgaW50ICpwMj0mYjsKICAgQTxpbnQ+IGFvYjIocDIpOwogICBhb2IyLnByKCk7CiAKICAgYW9iMj1hb2IxOwogICBhb2IyLnByKCk7Cn0=