#include <iostream>
#include <memory>

template<typename T>
struct Animal {
    Animal()  {		std::cout << "Animal" << std::endl;	}
	~Animal() {		std::cout << "~Animal" << std::endl;}
};

struct Cat {
	Cat()  {	std::cout << "Cat" << std::endl;	}
	~Cat() {	std::cout << "~Cat" << std::endl;	}
};

int main() {
	std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr;
	ptr = std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)>(new Animal<Cat>, [](Animal<Cat> *ls) {
		delete ls;
	});
/*
	std::unique_ptr<Animal<Cat>, void(*)(Animal<Cat>*)> ptr(new Animal<Cat>, [](Animal<Cat> *ls) {
		delete ls;
	});
*/
	return 0;
}
