#include #include #include "internal/lambds_traits.hpp" #include #include #include #include #include > namespace hqueue { template concept executor_t = requires(T a) { std::is_invocable_v; }; template class queue { public: using return_type = typename function_traits::return_type; using arguments = typename function_traits::argument_types; template struct Task { Args args; //use std expected }; queue(executor exec) : m_executor(exec) { } private: std::mutex m_mtx; std::condition_variable m_cv; executor m_executor; }; }