#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();
}