#include <iostream>
#include <vector>
using namespace std;
class B{};
class C : public B{};
template <class T>
class A {
public:
A(T * p) : ptr(p) {}
A & operator = ( A & p){
swap (p.ptr, ptr );
return *this;
}
void pr(){cout<<*ptr<<endl;}
private:
T * ptr;
int ai;
};
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();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjbGFzcyBCe307CmNsYXNzIEMgOiBwdWJsaWMgQnt9Owp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgQSB7CiAgICBwdWJsaWM6CiAgICAgICAgQShUICogcCkgOiBwdHIocCkge30KICAgICAgICBBICYgb3BlcmF0b3IgPSAoIEEgJiBwKXsKICAgICAgICAgICAgc3dhcCAocC5wdHIsIHB0ciApOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAgICAgIHZvaWQgcHIoKXtjb3V0PDwqcHRyPDxlbmRsO30KICAgIHByaXZhdGU6CiAgICAgICAgVCAqIHB0cjsKICAgICAgICBpbnQgYWk7Cn07CmludCBtYWluKCl7CiAgICBpbnQgYT01OwogICAgaW50ICpwMT0mYTsKICAgIC8vQSA8Qj4gcGEyKG5ldyBDKTsKICAgIEEgPGludCAqPiBwYTEgKG5ldyBpbnQgKihwMSApKTsKICAgIC8vIHBhMS5wcigpOwogICAgQTxpbnQ+IGFvYjEocDEpOwogICAgYW9iMS5wcigpOwogICAgaW50IGI9NjsKICAgIGludCAqcDI9JmI7CiAgICBBPGludD4gYW9iMihwMik7CiAgICBhb2IyLnByKCk7CiAgICBhb2IyPWFvYjE7CiAgICBhb2IyLnByKCk7Cn0=