Hello, do you confirm that it is valid to store a intrusive_ptr inside an atomic?! struct X { std::size_t use_count; X() : use_count( 0) {} friend inline void intrusive_ptr_add_ref( X * p) BOOST_NOEXCEPT { ++p->use_count; } friend inline void intrusive_ptr_release( X * p) { if ( 0 == --p->use_count) delete p; } }; X::ptr_t x1( new X() ); X::ptr_t x2( new X() ); boost::atomic< X::ptr_t > av1( x1); BOOST_ASSERT( av1.compare_exchange_strong( x1, x2) ); BOOST_ASSERT( av1.load() != x1); BOOST_ASSERT( av1.load() == x2); A type T used in generic template atomic<T> is required to be trivial copy-able, e.g. I think it is trivial copy-able (std::memcpy) only the use_count will not incremented. The memory layout of intrusive_ptr is a raw-pointer so trivial copy-able should be correct. What do you think? Oliver