#pragma once #include namespace waybar::util { template class ScopeGuard { public: explicit ScopeGuard(Func&& exit_function) : f{std::forward(exit_function)} {} ScopeGuard(const ScopeGuard&) = delete; ScopeGuard(ScopeGuard&&) = default; ScopeGuard& operator=(const ScopeGuard&) = delete; ScopeGuard& operator=(ScopeGuard&&) = default; ~ScopeGuard() { f(); } private: Func f; }; } // namespace waybar::util