Вот как объявлен конструктор конструктора std::thread
(с использованием Visual Studio 2015):
template<class _Fn,
class... _Args,
class = typename enable_if<
!is_same<typename decay<_Fn>::type, thread>::value>::type>
explicit thread(_Fn&& _Fx, _Args&&... _Ax)
Нет вопросов относительно _Fn
и _Args
, однако, что третий class = ...
меня полностью смущает. Что он делает, как он работает и для чего он нужен?