@@ -44,7 +44,7 @@ namespace STDEXEC::__std {
4444 using cuda::std::atomic_thread_fence;
4545 using cuda::std::atomic_signal_fence;
4646
47- #else
47+ #else // ^^^ STDEXEC_HAS_CUDA_STD_ATOMIC() / vvv !STDEXEC_HAS_CUDA_STD_ATOMIC()
4848
4949 using std::atomic;
5050 using std::atomic_flag;
@@ -99,18 +99,20 @@ namespace STDEXEC::__std {
9999 __atomic_store_n (__ptr_, __desired, __map_memory_order (__order));
100100 }
101101 };
102- # endif
102+ # endif // ^^^ __cpp_lib_atomic_ref < 2018'06L
103+
104+ #endif // ^^^ !STDEXEC_HAS_CUDA_STD_ATOMIC()
103105
104106 constexpr memory_order __memory_order_load (memory_order __order) noexcept {
105107 return __order == memory_order_acq_rel ? memory_order_acquire
106108 : __order == memory_order_release ? memory_order_relaxed
107109 : __order;
108110 }
109111
110- # if __cpp_lib_atomic_shared_ptr >= 2017'11L
112+ #if __cpp_lib_atomic_shared_ptr >= 2017'11L
111113 template <class _Ty >
112114 using __atomic_shared_ptr = std::atomic<std::shared_ptr<_Ty>>;
113- # else
115+ #else
114116 template <typename _Ty>
115117 struct __atomic_shared_ptr {
116118 using value_type = std::shared_ptr<_Ty>;
@@ -144,54 +146,71 @@ namespace STDEXEC::__std {
144146
145147 [[nodiscard]]
146148 bool is_lock_free () const noexcept {
147- return atomic_is_lock_free (&__ptr_);
149+ return std:: atomic_is_lock_free (&__ptr_);
148150 }
149151
150152 std::shared_ptr<_Ty> load (memory_order __order = memory_order_seq_cst) const noexcept {
151- return atomic_load_explicit (&__ptr_, __order);
153+ return std:: atomic_load_explicit (&__ptr_, static_cast <std::memory_order>( __order) );
152154 }
153155
154156 void store (std::shared_ptr<_Ty> __ptr, memory_order __order = memory_order_seq_cst) noexcept {
155- atomic_store_explicit (&__ptr_, std::move (__ptr), __order);
157+ std:: atomic_store_explicit (&__ptr_, std::move (__ptr), static_cast <std::memory_order>( __order) );
156158 }
157159
158160 std::shared_ptr<_Ty>
159161 exchange (std::shared_ptr<_Ty> __ptr, memory_order __order = memory_order_seq_cst) noexcept {
160- return atomic_exchange_explicit (&__ptr_, std::move (__ptr), __order);
162+ return std::atomic_exchange_explicit (
163+ &__ptr_, std::move (__ptr), static_cast <std::memory_order>(__order));
161164 }
162165
163166 bool compare_exchange_weak (
164167 std::shared_ptr<_Ty>& __expected,
165168 std::shared_ptr<_Ty> __desired,
166169 memory_order __success,
167170 memory_order __failure) noexcept {
168- return atomic_compare_exchange_weak_explicit (
169- &__ptr_, &__expected, std::move (__desired), __success, __failure);
171+ return std::atomic_compare_exchange_weak_explicit (
172+ &__ptr_,
173+ &__expected,
174+ std::move (__desired),
175+ static_cast <std::memory_order>(__success),
176+ static_cast <std::memory_order>(__failure));
170177 }
171178
172179 bool compare_exchange_weak (
173180 std::shared_ptr<_Ty>& __expected,
174181 std::shared_ptr<_Ty> __desired,
175182 memory_order __order = memory_order_seq_cst) noexcept {
176- return atomic_compare_exchange_weak_explicit (
177- &__ptr_, &__expected, std::move (__desired), __order, __memory_order_load (__order));
183+ return std::atomic_compare_exchange_weak_explicit (
184+ &__ptr_,
185+ &__expected,
186+ std::move (__desired),
187+ static_cast <std::memory_order>(__order),
188+ static_cast <std::memory_order>(__std::__memory_order_load (__order)));
178189 }
179190
180191 bool compare_exchange_strong (
181192 std::shared_ptr<_Ty>& __expected,
182193 std::shared_ptr<_Ty> __desired,
183194 memory_order __upon_success,
184195 memory_order __upon_failure) noexcept {
185- return atomic_compare_exchange_strong_explicit (
186- &__ptr_, &__expected, std::move (__desired), __upon_success, __upon_failure);
196+ return std::atomic_compare_exchange_strong_explicit (
197+ &__ptr_,
198+ &__expected,
199+ std::move (__desired),
200+ static_cast <std::memory_order>(__upon_success),
201+ static_cast <std::memory_order>(__upon_failure));
187202 }
188203
189204 bool compare_exchange_strong (
190205 std::shared_ptr<_Ty>& __expected,
191206 std::shared_ptr<_Ty> __desired,
192207 memory_order __order = memory_order_seq_cst) noexcept {
193- return atomic_compare_exchange_strong_explicit (
194- &__ptr_, &__expected, std::move (__desired), __order, __memory_order_load (__order));
208+ return std::atomic_compare_exchange_strong_explicit (
209+ &__ptr_,
210+ &__expected,
211+ std::move (__desired),
212+ static_cast <std::memory_order>(__order),
213+ static_cast <std::memory_order>(__std::__memory_order_load (__order)));
195214 }
196215
197216 private:
@@ -201,7 +220,6 @@ namespace STDEXEC::__std {
201220 template <typename _Ty>
202221 __atomic_shared_ptr (std::shared_ptr<_Ty>) -> __atomic_shared_ptr<_Ty>;
203222
204- # endif
223+ #endif // ^^^ __cpp_lib_atomic_shared_ptr < 2017'11L
205224
206- #endif
207225} // namespace STDEXEC::__std
0 commit comments