// This file is part of Desktop App Toolkit, // a set of libraries for developing nice desktop applications. // // For license and copyright information please follow this link: // https://github.com/desktop-app/legal/blob/master/LEGAL // #pragma once namespace base { void call_delayed(crl::time delay, FnMut &&callable); template < typename Guard, typename Callable, typename GuardTraits = crl::guard_traits>, typename = std::enable_if_t< sizeof(GuardTraits) != crl::details::dependent_zero>> inline void call_delayed( crl::time delay, Guard &&object, Callable &&callable) { return call_delayed(delay, crl::guard( std::forward(object), std::forward(callable))); } template [[nodiscard]] inline auto fn_delayed( crl::time delay, Guard &&object, Callable &&callable) { auto guarded = crl::guard( std::forward(object), std::forward(callable)); return [saved = std::move(guarded), delay] { auto copy = saved; base::call_delayed(delay, std::move(copy)); }; } } // namespace base