
Hi, After upgrading from 1.42 to 1.43 (using VC10 x64), I encounter an access violation related to thread_specific_ptr. The program used to run fine with previous version of Boost on several platforms (Win x32, Win x64 and Linux x64). I've managed to create a small program that reproduces the problem. It seems to be a static initialization order related problem. If the TSS is initialized by a static object, the program fails (nullptr exception). However, if the static object is commented out, and the TSS is solely initialized in the main, the program runs fine. Is thread_specific_ptr supposed to work even when initialized by another static object? Or does it require to be initialized only after entering main? Regards, Tanguy #include <boost/thread/thread.hpp> #include <boost/thread/tss.hpp> #include <iostream> #include <stdexcept> namespace { boost::thread_specific_ptr<int> tss; void verifyTss() { if (tss.get() == nullptr) throw std::runtime_error("verifyTss failed (nullptr)"); } class InitTss { public: InitTss() { tss.reset(new int); } }; InitTss init_tss; } int main(int argc, char argv[]) { try { tss.reset(new int); verifyTss(); boost::thread thread([] () { tss.reset(new int); }); thread.join(); verifyTss(); } catch (const std::exception & error) { std::cerr << "ERROR: " << error.what() << std::endl; } }