I can't figure out how to pass member function with variadic template arguments to std::thread constructor. I have a method that receives function and its arguments and need to pass them to other method which is invoked in new thread and calls passed function there. Here is simplified version:
class Test { public: template<typename Function, typename... Args> void Run(Function&& f, Args&&... args) { std::thread t(&Test::Operation, this, f, args...); // how??? t.detach(); } template<typename Function, typename... Args> void Operation(Function&& f, Args&&... args) { f(args...); } }; Test test; test.Run([](const std::string& msg) { std::cout << msg; }, "Hi!"); There is something wrong in passing arguments this way, I get the following error: 'std::thread::thread': no overloaded function takes 4 arguments. How can I do this?