diff options
Diffstat (limited to 'boost/smart_ptr/detail/spinlock.hpp')
-rw-r--r-- | boost/smart_ptr/detail/spinlock.hpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/boost/smart_ptr/detail/spinlock.hpp b/boost/smart_ptr/detail/spinlock.hpp index 88d7ad62c7..19f93d7c6b 100644 --- a/boost/smart_ptr/detail/spinlock.hpp +++ b/boost/smart_ptr/detail/spinlock.hpp @@ -31,7 +31,16 @@ #include <boost/config.hpp> #include <boost/smart_ptr/detail/sp_has_sync.hpp> -#if defined( BOOST_SP_USE_PTHREADS ) +#if defined( BOOST_SP_USE_STD_ATOMIC ) +# if !defined( __clang__ ) +# include <boost/smart_ptr/detail/spinlock_std_atomic.hpp> +# else +// Clang (at least up to 3.4) can't compile spinlock_pool when +// using std::atomic, so substitute the __sync implementation instead. +# include <boost/smart_ptr/detail/spinlock_sync.hpp> +# endif + +#elif defined( BOOST_SP_USE_PTHREADS ) # include <boost/smart_ptr/detail/spinlock_pt.hpp> #elif defined(__GNUC__) && defined( __arm__ ) && !defined( __thumb__ ) |