Ответ 1
Что я делаю неправильно?
Почти ничего. Фактически, ваша программа является законной и ее поведение четко определено.
Ошибка компилятора, которую вы получаете, обязательно является ошибкой в реализации стандартной библиотеки, которая поставляется вместе с вашим компилятором, возможно, связана с тем, что VC11 не поддерживает вариативные шаблоны, а макробная техника, используемая для подделки, - это не идеально.
Это говорит о том, что даже если ваша программа скомпилировалась, вам все равно придется присоединиться к вашему потоку или отсоединиться от него до того, как обломок std::thread
RAII будет уничтожен - возникает исключение, если деструктор std::thread
вызывается, пока инкапсулированная нить все еще работает (если только она не была отсоединена).