Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision 2065609d54faba689bd6249eb4c159415fb8bf29)
+++ src/Common/utility.h	(revision 234223fb13167c125e360f00a079c2de9c607865)
@@ -255,4 +255,23 @@
 	~ValueGuardPtr() { if( ref ) *ref = old; }
 };
+
+template< typename aT >
+struct FuncGuard {
+	aT m_after;
+
+	template< typename bT >
+	FuncGuard( bT before, aT after ) : m_after( after ) {
+		before();
+	}
+
+	~FuncGuard() {
+		m_after();
+	}
+};
+
+template< typename bT, typename aT >
+FuncGuard<aT> makeFuncGuard( bT && before, aT && after ) {
+	return FuncGuard<aT>( std::forward<bT>(before), std::forward<aT>(after) );
+}
 
 template< typename T >
