@@ -79,13 +79,13 @@ cppcoro::detail::cancellation_registration_list_chunk::allocate(std::uint32_t en
7979 throw std::bad_alloc{};
8080 }
8181
82- std::atomic_init (&chunk->m_nextChunk , static_cast <cancellation_registration_list_chunk*>(nullptr ) );
82+ :: new (&chunk->m_nextChunk ) std::atomic <cancellation_registration_list_chunk*>(nullptr );
8383 chunk->m_prevChunk = nullptr ;
84- std::atomic_init (&chunk->m_approximateFreeCount , static_cast <std::int32_t >(entryCount - 1 ));
84+ :: new (&chunk->m_approximateFreeCount ) std::atomic< int32_t >( static_cast <std::int32_t >(entryCount - 1 ));
8585 chunk->m_entryCount = entryCount;
8686 for (std::uint32_t i = 0 ; i < entryCount; ++i)
8787 {
88- std::atomic_init (&chunk->m_entries [i], static_cast <cancellation_registration*>(nullptr ) );
88+ :: new (&chunk->m_entries [i]) std::atomic <cancellation_registration*>(nullptr );
8989 }
9090
9191 return chunk;
@@ -112,14 +112,15 @@ cppcoro::detail::cancellation_registration_list::allocate()
112112 throw std::bad_alloc{};
113113 }
114114
115- std::atomic_init (&bucket->m_approximateTail , &bucket->m_headChunk );
116- std::atomic_init (&bucket->m_headChunk .m_nextChunk , static_cast <cancellation_registration_list_chunk*>(nullptr ) );
115+ :: new (&bucket->m_approximateTail ) std::atomic<cancellation_registration_list_chunk*>( &bucket->m_headChunk );
116+ :: new (&bucket->m_headChunk .m_nextChunk ) std::atomic <cancellation_registration_list_chunk*>(nullptr );
117117 bucket->m_headChunk .m_prevChunk = nullptr ;
118- std::atomic_init (&bucket->m_headChunk .m_approximateFreeCount , static_cast <std::int32_t >(initialChunkSize - 1 ));
118+ ::new (&bucket->m_headChunk .m_approximateFreeCount )
119+ std::atomic<int32_t >(static_cast <std::int32_t >(initialChunkSize - 1 ));
119120 bucket->m_headChunk .m_entryCount = initialChunkSize;
120121 for (std::uint32_t i = 0 ; i < initialChunkSize; ++i)
121122 {
122- std::atomic_init (&bucket->m_headChunk .m_entries [i], static_cast <cancellation_registration*>(nullptr ) );
123+ :: new (&bucket->m_headChunk .m_entries [i]) std::atomic <cancellation_registration*>(nullptr );
123124 }
124125
125126 return bucket;
@@ -158,7 +159,7 @@ cppcoro::detail::cancellation_registration_state::allocate()
158159 state->m_listCount = listCount;
159160 for (std::uint32_t i = 0 ; i < listCount; ++i)
160161 {
161- std::atomic_init (&state->m_lists [i], static_cast <cancellation_registration_list*>(nullptr ) );
162+ :: new (&state->m_lists [i]) std::atomic <cancellation_registration_list*>(nullptr );
162163 }
163164
164165 return state;
@@ -187,7 +188,7 @@ cppcoro::detail::cancellation_registration_state::add_registration(
187188 // Pre-claim the first slot.
188189 registration->m_chunk = &newList->m_headChunk ;
189190 registration->m_entryIndex = 0 ;
190- std::atomic_init (&newList->m_headChunk .m_entries [0 ], registration);
191+ :: new (&newList->m_headChunk .m_entries [0 ]) std::atomic<cancellation_registration*>( registration);
191192
192193 if (listPtr.compare_exchange_strong (
193194 list,
@@ -305,7 +306,7 @@ cppcoro::detail::cancellation_registration_state::add_registration(
305306 // Pre-allocate first slot.
306307 registration->m_chunk = newChunk;
307308 registration->m_entryIndex = 0 ;
308- std::atomic_init (&newChunk->m_entries [0 ], registration);
309+ :: new (&newChunk->m_entries [0 ]) std::atomic<cancellation_registration*>( registration);
309310
310311 cancellation_registration_list_chunk* oldNext = nullptr ;
311312 if (lastChunk->m_nextChunk .compare_exchange_strong (
0 commit comments