
boost/detail/flyweight_mutex.hpp implements a mutex class based on a Win32 CRITICAL_SECTION or using Pthreads according to the following pp logic: #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) // based on CRITICAL_SECTION #elif defined(BOOST_HAS_PTHREADS) // based on Pthreads The problem with this is that WIN32 and related macros are not predefined in some environments (Cygwin at least) but rather they are defined inside windows.h, thus making the logic above dependent on the inclusion context. For instance, the two programs #include <boost/detail/lightweight_mutex.hpp> #include <iostream> int main() { std::cout<<sizeof(boost::detail::lightweight_mutex)<<std::endl; } and #include <windows.h> #include <boost/detail/lightweight_mutex.hpp> #include <iostream> int main() { std::cout<<sizeof(boost::detail::lightweight_mutex)<<std::endl; } output 4 and 24, respectively, under Cygwin. Joaquín M López Muñoz Telefónica, Investigación y Desarrollo