diff --git a/include/boost/lockfree/detail/atomic.hpp b/include/boost/lockfree/detail/atomic.hpp index ebc07d6..767dcbe 100644 --- a/include/boost/lockfree/detail/atomic.hpp +++ b/include/boost/lockfree/detail/atomic.hpp @@ -18,22 +18,22 @@ namespace detail { #if defined( BOOST_LOCKFREE_FORCE_BOOST_ATOMIC ) using boost::atomic; +using boost::memory_order_acq_rel; using boost::memory_order_acquire; -using boost::memory_order_consume; using boost::memory_order_relaxed; using boost::memory_order_release; #else using std::atomic; +using std::memory_order_acq_rel; using std::memory_order_acquire; -using std::memory_order_consume; using std::memory_order_relaxed; using std::memory_order_release; #endif } // namespace detail using detail::atomic; +using detail::memory_order_acq_rel; using detail::memory_order_acquire; -using detail::memory_order_consume; using detail::memory_order_relaxed; using detail::memory_order_release; diff --git a/include/boost/lockfree/queue.hpp b/include/boost/lockfree/queue.hpp index 9609ebe..876e6ed 100644 --- a/include/boost/lockfree/queue.hpp +++ b/include/boost/lockfree/queue.hpp @@ -470,7 +470,12 @@ class queue * * \note Thread-safe and non-blocking. Might modify return argument even if operation fails. * */ +#if !defined( BOOST_NO_CXX20_HDR_CONCEPTS ) template < typename U > + requires( std::is_constructible_v< U, T && > ) +#else + template < typename U, typename Enabler = std::enable_if_t< std::is_constructible< U, T&& >::value > > +#endif bool pop( U& ret ) { for ( ;; ) { @@ -569,7 +574,12 @@ class queue * \note Not thread-safe, but non-blocking. Might modify return argument even if operation fails. * * */ +#if !defined( BOOST_NO_CXX20_HDR_CONCEPTS ) template < typename U > + requires( std::is_constructible_v< U, T && > ) +#else + template < typename U, typename Enabler = std::enable_if_t< std::is_constructible< U, T&& >::value > > +#endif bool unsynchronized_pop( U& ret ) { for ( ;; ) { diff --git a/include/boost/lockfree/spsc_queue.hpp b/include/boost/lockfree/spsc_queue.hpp index 2205026..c8ed34b 100644 --- a/include/boost/lockfree/spsc_queue.hpp +++ b/include/boost/lockfree/spsc_queue.hpp @@ -28,7 +28,6 @@ #include #include -#include #include #include #include @@ -768,7 +767,7 @@ class spsc_queue : public detail::make_ringbuffer< T, Options... >::ringbuffer_t template < typename U > requires( std::is_convertible_v< T, U > ) #else - template < typename U, typename Enabler = std::enable_if< std::is_convertible< T, U >::value > > + template < typename U, typename Enabler = std::enable_if_t< std::is_convertible< T, U >::value > > #endif bool pop( U& ret ) { diff --git a/include/boost/lockfree/stack.hpp b/include/boost/lockfree/stack.hpp index b60b121..5926f89 100644 --- a/include/boost/lockfree/stack.hpp +++ b/include/boost/lockfree/stack.hpp @@ -22,7 +22,6 @@ #include #include -#include #include #include #include @@ -589,7 +588,7 @@ class stack template < typename U > requires( std::is_convertible_v< T, U > ) #else - template < typename U, typename Enabler = std::enable_if< std::is_convertible< T, U >::value > > + template < typename U, typename Enabler = std::enable_if_t< std::is_convertible< T, U >::value > > #endif bool pop( U& ret ) { @@ -660,7 +659,7 @@ class stack template < typename U > requires( std::is_convertible_v< T, U > ) #else - template < typename U, typename Enabler = std::enable_if< std::is_convertible< T, U >::value > > + template < typename U, typename Enabler = std::enable_if_t< std::is_convertible< T, U >::value > > #endif bool unsynchronized_pop( U& ret ) {