#include <iostream>
#include <memory>
#include <vector>
#include <exception>
#include <functional>

using namespace std;

int main()
{
	try {
        vector<int> v{};
        v.push_back(42);
        unique_ptr<decltype(v), function<void(decltype(v)*)>>
            p{&v, [] (decltype(v)* v) { if (uncaught_exception()) { v->pop_back(); }}};
        throw exception(); // rollback 
        p.release(); // explicit commit
	} catch (...) {
	}
	
    return 0;
}

