#include <iostream>
#include <memory>
using namespace std;
template<typename T>
ostream& operator <<(ostream& out,const auto_ptr<T>& p)
{
if(p.get()==NULL)
out<<"NULL";
else
out<<*p;
return out;
}
int main() {
auto_ptr<int> p{new int{369}};
auto_ptr<int> q;
cout<<"after initialzation:"<<endl;
cout<<" P: "<<p<<endl;
cout<<" q: "<<q<<endl;
q=p;
cout<<"after assigning auto pointers: "<<endl;
cout<<" P: "<<p<<endl;
cout<<" q: "<<q<<endl;
*q +=13;
cout<<"after *q +=13 : "<<endl;
cout<<" P: "<<p<<endl;
cout<<" q: "<<q<<endl;
cout<<"after reassignment : "<<endl;
cout<<" P: "<<p<<endl;
cout<<" q: "<<q<<endl;
return 0;
}