This is a very nice small implementation but, as always with C++, devil is in the details:
* Creation of an std::function needs a dynamic allocation, so if the allocation fails an exception will be thrown and if the finally is guarding a resource, the resource will be leaked
* std::function has a non-negligible calling overhead, hence this should not be used in performance-sensitive code
* Checking a condition inside the finally clause is not very elegant, a better idiom in C++ is to support dismissing a scope guard.
* The finallyClause may throw an exception, and since it is called in a destructor this is generally considered a bad idea. I don't know what could happen in this case, but some scope guard implementations I've seen catch the exception and explicitly call std::terminate(). I guess this is for performance reasons, because the destructor can be declared nothrow.
Here there is a more complex implementation, which addresses most of the corner cases:
http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Stepha...