#pragma once namespace ext { template class unlock_guard { public: unlock_guard(T & mutex_) : mutex(mutex_) { mutex.unlock(); } ~unlock_guard() { mutex.lock(); } unlock_guard(const unlock_guard &) = delete; unlock_guard & operator=(const unlock_guard &) = delete; private: T & mutex; }; }