#include <iostream>
#include <memory>
#include <functional>
template<typename T>
using TypeErasedUPtr = std::unique_ptr<T, std::function<void(T*)>>;
int main()
{
TypeErasedUPtr<int> test{new int(5), [](int* x){ delete x; }};
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnVzaW5nIFR5cGVFcmFzZWRVUHRyID0gc3RkOjp1bmlxdWVfcHRyPFQsIHN0ZDo6ZnVuY3Rpb248dm9pZChUKik+PjsKCmludCBtYWluKCkgCnsKCVR5cGVFcmFzZWRVUHRyPGludD4gdGVzdHtuZXcgaW50KDUpLCBbXShpbnQqIHgpeyBkZWxldGUgeDsgfX07CglyZXR1cm4gMDsKfQ==