#include <iostream>
#include <functional>

using namespace std::placeholders;

class DelegateToFunctionEnd {

    typedef std::function<void(void)> EndFunction; 

    public: 
    DelegateToFunctionEnd(EndFunction endFunction) :
        callAtEnd(endFunction)
    { }
    
    ~DelegateToFunctionEnd() {
    	callAtEnd();
    }
    
    private: 
    
    EndFunction callAtEnd;
};

class Results {
	
	public:
	
	void setStatus(int i) {
		status = i;
	}
	
	int status;
};


int function(Results &res) {
	int error;
	DelegateToFunctionEnd del(std::bind(&Results::setStatus, &res, std::cref(error)));
	// Some operations
            error = -10;
	if (error < 0) {
		return 0;
	}

}

int main() {
	
	Results r;
	function(r);
	
	std::cout << r.status;
	
	// your code goes here
	return 0;
}