MSVC2013 и методы шаблонов с переменным значением с ошибкой компиляции std::thread

У меня есть класс диспетчера потоков с помощью следующих методов:

template <class _Fn, class... _Args>
void create_thread (_Fn&& fun, _Args&&... args)
{
    std::thread t (std::mem_fn(&MyClass::threads_entry<_Fn, _Args...>),
                    this, fun, args...);
}

template <class _Fn, class... _Args>
void threads_entry (_Fn&& fun, _Args&&... args)
{
  fun (std::forward <_Args>(args)...);
  perform_on_before_thread_exit_tasks();
}

В другом классе я пытаюсь использовать это. Этот класс имеет следующие члены:

void make_sure_thread_created ()
{
    m_threads.create_thread (
                    &MyClass2::thread_tasks,
                    this);
}

void thread_tasks ()
{
}

Я получаю ошибку компиляции (MS VC2013):

error: C2064: term does not evaluate to a function taking 1 arguments

Это указывает на эту строку кода:

fun (std::forward <_Args>(args)...);

Я делаю что-то неправильно? Или это ошибка компилятора? Что тут можно сделать?...

1 ответ

Кажется, это ошибка компиляторов VC2013 и VC2015.

Временное решение:

m_threads.create_thread (
    std::bind (&MyClass2::thread_tasks, std::placeholders::_1),
    this);
Другие вопросы по тегам