Let's have a template class like below: template< typename T > class finalGuard { T m_func; public: finalGuard(T func) : m_func(func) {} ~finalGuard() { m_func(); } }; What is the requirement? I need to execute lambda when a template instance of the above class goes out of scope or any exception is caused during the execution of code. We can think of this as more or like a final pattern. When a class object's lifetime ends, a piece of code will start executing to wrap up things. Now I have a factory-like function defined as below to resolve type dependency which lambda is expecting: template< typename T > finalGuard< T > finalCall(T obj) { return obj; } The below piece of code is used to bind the lambda with the class instance and it gets executed as soon as a class object destructor gets invoked. int main() { try { auto guard = finalCall([]() noexcept { cout << "Good bye via exception!\n"; });