Index: boost/thread/locks.hpp =================================================================== --- boost/thread/locks.hpp (revision 53074) +++ boost/thread/locks.hpp (working copy) @@ -214,6 +214,9 @@ unique_lock& operator=(unique_lock&); unique_lock& operator=(upgrade_lock& other); public: +#ifdef __SUNPRO_CC + unique_lock(const volatile unique_lock&); +#endif unique_lock(): m(0),is_locked(false) {} @@ -297,12 +300,20 @@ return detail::thread_move_t >(*this); } +#ifdef __SUNPRO_CC + unique_lock& operator=(unique_lock other) + { + swap(other); + return *this; + } +#else unique_lock& operator=(detail::thread_move_t > other) { unique_lock temp(other); swap(temp); return *this; } +#endif unique_lock& operator=(detail::thread_move_t > other) { Index: boost/thread/detail/thread.hpp =================================================================== --- boost/thread/detail/thread.hpp (revision 53074) +++ boost/thread/detail/thread.hpp (working copy) @@ -144,6 +144,9 @@ struct dummy; #endif public: +#ifdef __SUNPRO_CC + thread(const volatile thread&); +#endif thread(); ~thread(); @@ -202,12 +205,20 @@ x->thread_info.reset(); } +#ifdef __SUNPRO_CC + thread& operator=(thread x) + { + swap(x); + return *this; + } +#else thread& operator=(detail::thread_move_t x) { thread new_thread(x); swap(new_thread); return *this; } +#endif operator detail::thread_move_t() {