diff --git a/include/Nazara/Core/Functor.hpp b/include/Nazara/Core/Functor.hpp index 4ecbeed25..a93ffb34b 100644 --- a/include/Nazara/Core/Functor.hpp +++ b/include/Nazara/Core/Functor.hpp @@ -32,7 +32,7 @@ struct NzFunctorWithoutArgs : NzFunctor template struct NzFunctorWithArgs : NzFunctor { - NzFunctorWithArgs(F func, Args&... args); + NzFunctorWithArgs(F func, Args&&... args); void Run(); diff --git a/include/Nazara/Core/Functor.inl b/include/Nazara/Core/Functor.inl index 265ef5605..bdc4bc1f9 100644 --- a/include/Nazara/Core/Functor.inl +++ b/include/Nazara/Core/Functor.inl @@ -2,6 +2,8 @@ // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp +#include + template NzFunctorWithoutArgs::NzFunctorWithoutArgs(F func) : m_func(func) @@ -15,9 +17,9 @@ void NzFunctorWithoutArgs::Run() } template -NzFunctorWithArgs::NzFunctorWithArgs(F func, Args&... args) : +NzFunctorWithArgs::NzFunctorWithArgs(F func, Args&&... args) : m_func(func), -m_args(args...) +m_args(std::forward(args)...) { } diff --git a/include/Nazara/Core/MemoryHelper.hpp b/include/Nazara/Core/MemoryHelper.hpp index 1dafec898..959f170f6 100644 --- a/include/Nazara/Core/MemoryHelper.hpp +++ b/include/Nazara/Core/MemoryHelper.hpp @@ -13,7 +13,7 @@ void NzOperatorDelete(void* ptr); void* NzOperatorNew(std::size_t size); template -T* NzPlacementNew(void* ptr, Args... args); +T* NzPlacementNew(void* ptr, Args&&... args); #include diff --git a/include/Nazara/Core/MemoryHelper.inl b/include/Nazara/Core/MemoryHelper.inl index 14a297fff..e28363a7d 100644 --- a/include/Nazara/Core/MemoryHelper.inl +++ b/include/Nazara/Core/MemoryHelper.inl @@ -11,6 +11,7 @@ #include #include +#include #include inline void NzOperatorDelete(void* ptr) @@ -32,7 +33,7 @@ inline void* NzOperatorNew(std::size_t size) } template -T* NzPlacementNew(void* ptr, Args... args) +T* NzPlacementNew(void* ptr, Args&&... args) { return new (ptr) T(std::forward(args)...); } diff --git a/include/Nazara/Core/TaskScheduler.hpp b/include/Nazara/Core/TaskScheduler.hpp index 1d34403e4..b626f830c 100644 --- a/include/Nazara/Core/TaskScheduler.hpp +++ b/include/Nazara/Core/TaskScheduler.hpp @@ -17,7 +17,7 @@ class NAZARA_API NzTaskScheduler ~NzTaskScheduler() = delete; template static void AddTask(F function); - template static void AddTask(F function, Args... args); + template static void AddTask(F function, Args&&... args); template static void AddTask(void (C::*function)(), C* object); static unsigned int GetWorkerCount(); static bool Initialize(); diff --git a/include/Nazara/Core/TaskScheduler.inl b/include/Nazara/Core/TaskScheduler.inl index ffef85de3..5230f260b 100644 --- a/include/Nazara/Core/TaskScheduler.inl +++ b/include/Nazara/Core/TaskScheduler.inl @@ -11,9 +11,9 @@ void NzTaskScheduler::AddTask(F function) } template -void NzTaskScheduler::AddTask(F function, Args... args) +void NzTaskScheduler::AddTask(F function, Args&&... args) { - AddTaskFunctor(new NzFunctorWithArgs(function, args...)); + AddTaskFunctor(new NzFunctorWithArgs(function, std::forward(args)...)); } template diff --git a/include/Nazara/Core/Thread.hpp b/include/Nazara/Core/Thread.hpp index bbf82c31b..ca5fd498a 100644 --- a/include/Nazara/Core/Thread.hpp +++ b/include/Nazara/Core/Thread.hpp @@ -21,7 +21,7 @@ class NAZARA_API NzThread : NzNonCopyable NzThread(); template NzThread(F function); - template NzThread(F function, Args... args); + template NzThread(F function, Args&&... args); template NzThread(void (C::*function)(), C* object); NzThread(NzThread&& other); ~NzThread(); diff --git a/include/Nazara/Core/Thread.inl b/include/Nazara/Core/Thread.inl index b057d770e..8e4c60181 100644 --- a/include/Nazara/Core/Thread.inl +++ b/include/Nazara/Core/Thread.inl @@ -2,6 +2,7 @@ // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp +#include #include template @@ -11,9 +12,9 @@ NzThread::NzThread(F function) } template -NzThread::NzThread(F function, Args... args) +NzThread::NzThread(F function, Args&&... args) { - CreateImpl(new NzFunctorWithArgs(function, args...)); + CreateImpl(new NzFunctorWithArgs(function, std::forward(args)...)); } template