Index: boost/thread/win32/thread.hpp =================================================================== --- boost/thread/win32/thread.hpp (revision 45484) +++ boost/thread/win32/thread.hpp (working copy) @@ -214,7 +214,7 @@ } #else template - static inline detail::thread_data_ptr make_thread_info(F f) + static inline detail::thread_data_base* make_thread_info(F f) { return detail::heap_new >(f); } @@ -228,6 +228,8 @@ thread(); ~thread(); + void __boost_workaround_to_set_thread_info(detail::thread_data_base* tinfo); + #ifdef BOOST_HAS_RVALUE_REFS template thread(F&& f): @@ -237,9 +239,10 @@ } #else template - explicit thread(F f): - thread_info(make_thread_info(f)) + explicit thread(F f) { + detail::thread_data_base* const tinfo = make_thread_info(f); + __boost_workaround_to_set_thread_info(tinfo); start_thread(); } Index: libs/thread/src/win32/thread.cpp =================================================================== --- libs/thread/src/win32/thread.cpp (revision 45484) +++ libs/thread/src/win32/thread.cpp (working copy) @@ -189,6 +189,11 @@ thread::thread() {} + void thread::__boost_workaround_to_set_thread_info(detail::thread_data_base* const tinfo) + { + thread_info = tinfo; + } + void thread::start_thread() { uintptr_t const new_thread=_beginthreadex(0,0,&thread_start_function,thread_info.get(),CREATE_SUSPENDED,&thread_info->id);