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