diff --git a/loader/include/Geode/utils/MiniFunction.hpp b/loader/include/Geode/utils/MiniFunction.hpp index f11f823c..4f68dc00 100644 --- a/loader/include/Geode/utils/MiniFunction.hpp +++ b/loader/include/Geode/utils/MiniFunction.hpp @@ -31,6 +31,11 @@ namespace geode::utils { return new MiniFunctionState(*this); } }; + + template <class Callable, class Ret, class... Args> + concept MiniFunctionCallable = requires(Callable&& func, Args... args) { + { func(args...) } -> std::same_as<Ret>; + }; template <class Ret, class... Args> class MiniFunction<Ret(Args...)> { @@ -56,9 +61,7 @@ namespace geode::utils { } template <class Callable> - requires requires(Callable&& func, Args... args) { - { func(args...) } -> std::same_as<Ret>; - } + requires(MiniFunctionCallable<Callable, Ret, Args...> && !std::is_same_v<Callable, MiniFunction<Ret, Args...>>) MiniFunction(Callable&& func) : m_state(new MiniFunctionState<std::decay_t<Callable>, Ret, Args...>(std::forward<Callable>(func))) {} @@ -83,4 +86,4 @@ namespace geode::utils { return m_state; } }; -} \ No newline at end of file +}