added missing std::forwards to decltype based stuff

the previous version could have caused some minor trouble in extreme
edge-cases
This commit is contained in:
Kjistóf 2016-11-27 17:58:47 +01:00
parent ccb0173877
commit 4cd6eb4e2f

View File

@ -70,10 +70,10 @@ public:
/* adding tasks to the queue */ /* adding tasks to the queue */
// TODO: use template-based policies to deal with priority tasks to avoid code-dupe. // TODO: use template-based policies to deal with priority tasks to avoid code-dupe.
template <typename F, typename... Args> template <typename F, typename... Args>
auto add_task(F&& f, Args&&... args) -> std::future<decltype(f(args...))>; auto add_task(F&& f, Args&&... args) -> std::future<decltype(f(std::forward<Args>(args)...))>;
template <typename F, typename... Args> template <typename F, typename... Args>
auto priority_task(F&& f, Args&&... args) -> std::future<decltype(f(args...))>; auto priority_task(F&& f, Args&&... args) -> std::future<decltype(f(std::forward<Args>(args)...))>;
template <typename R> void add_task(std::packaged_task<R()>& ); template <typename R> void add_task(std::packaged_task<R()>& );
template <typename R> void priority_task(std::packaged_task<R()>& ); template <typename R> void priority_task(std::packaged_task<R()>& );
@ -107,9 +107,9 @@ thread_pool::~thread_pool()
template <typename F, typename... Args> template <typename F, typename... Args>
auto thread_pool::add_task(F&& f, Args&&... args) auto thread_pool::add_task(F&& f, Args&&... args)
-> std::future<decltype(f(args...))> -> std::future<decltype(f(std::forward<Args>(args)...))>
{ {
auto pckgd_tsk = std::make_shared<std::packaged_task<decltype(f(args...))()> > auto pckgd_tsk = std::make_shared<std::packaged_task<decltype(f(std::forward<Args>(args)...))()> >
(std::bind(std::forward<F>(f), std::forward<Args>(args)...)); (std::bind(std::forward<F>(f), std::forward<Args>(args)...));
{ {
@ -123,9 +123,9 @@ auto thread_pool::add_task(F&& f, Args&&... args)
template <typename F, typename... Args> template <typename F, typename... Args>
auto thread_pool::priority_task(F&& f, Args&&... args) auto thread_pool::priority_task(F&& f, Args&&... args)
-> std::future<decltype(f(args...))> -> std::future<decltype(f(std::forward<Args>(args)...))>
{ {
auto pckgd_tsk = std::make_shared<std::packaged_task<decltype(f(args...))()> > auto pckgd_tsk = std::make_shared<std::packaged_task<decltype(f(std::forward<Args>(args)...))()> >
(std::bind(std::forward<F>(f), std::forward<Args>(args)...)); (std::bind(std::forward<F>(f), std::forward<Args>(args)...));
auto ret_val= pckgd_tsk->get_future(); auto ret_val= pckgd_tsk->get_future();