#include <iostream>
#include <memory>
using namespace std;

struct MyDeleter
{
	void operator() (void *) const
	{
		cout << "Deleter called\n";
	}
};

int main() {
	typedef shared_ptr<void> S;
	cout << "1\n";
	{
		S x(nullptr, MyDeleter());
		cout << "2\n";
		{
			S y(x);
			cout << "3\n";
		}
		cout << "4\n";
	}
	cout << "5\n";
	return 0;
}