99#include < test/execution.hpp>
1010
1111#include < algorithm>
12+ #include < array>
1213#include < atomic>
1314#include < cassert>
1415#include < chrono>
@@ -50,7 +51,7 @@ inline auto test::stop_visible(Token token, Stop stop) -> void {
5051 // was requested.
5152 // Reference: [thread.stoptoken.intro] p3
5253
53- Token tokens[] = {token, token, token, token};
54+ std::array< Token, 4 > tokens {token, token, token, token};
5455
5556 auto predicate = [](auto && t) { return t.stop_requested (); };
5657 ASSERT ((::std::ranges::none_of (tokens, predicate)));
@@ -82,7 +83,7 @@ inline auto test::stop_callback(Token token, Stop stop) -> void {
8283
8384 struct Callback {
8485 Data* data;
85- Callback (Data* data) : data(data) {}
86+ explicit Callback (Data* data) : data(data) {}
8687 auto operator ()() {
8788 ++this ->data ->count ;
8889 this ->data ->stop_requested = this ->data ->token .stop_requested ();
@@ -91,7 +92,7 @@ inline auto test::stop_callback(Token token, Stop stop) -> void {
9192
9293 Data data{token};
9394
94- ::test_std::stop_callback_for_t <Token, Callback> cb0 (token, &data);
95+ ::test_std::stop_callback_for_t <Token, Callback> cb0 (token, Callback{ &data} );
9596 ASSERT (data.count == 0 );
9697 ASSERT (data.stop_requested == false );
9798 stop ();
@@ -102,7 +103,7 @@ inline auto test::stop_callback(Token token, Stop stop) -> void {
102103 stop ();
103104 ASSERT (data.count == 1 );
104105
105- ::test_std::stop_callback_for_t <Token, Callback> cb1 (token, &data);
106+ ::test_std::stop_callback_for_t <Token, Callback> cb1 (token, Callback{ &data} );
106107 ASSERT (data.count == 2 );
107108 stop ();
108109 ASSERT (data.count == 2 );
@@ -122,13 +123,13 @@ auto test::stop_callback_dtor_deregisters(Token token, Stop stop) -> void {
122123
123124 struct Callback {
124125 bool * ptr;
125- Callback (bool * ptr) : ptr(ptr) {}
126+ explicit Callback (bool * ptr) : ptr(ptr) {}
126127 auto operator ()() { *this ->ptr = true ; }
127128 };
128129
129130 bool flag{};
130131 ::std::invoke ([token, &flag] {
131- ::test_std::stop_callback_for_t <Token, Callback> cb (token, &flag);
132+ ::test_std::stop_callback_for_t <Token, Callback> cb (token, Callback{ &flag} );
132133 ASSERT (flag == false );
133134 });
134135
@@ -164,7 +165,7 @@ inline auto test::stop_callback_dtor_other_thread(Token token, Stop stop) -> voi
164165 };
165166 struct Callback {
166167 Data* data;
167- Callback (Data* data) : data(data) {}
168+ explicit Callback (Data* data) : data(data) {}
168169 auto operator ()() -> void {
169170 using namespace ::std::chrono_literals;
170171 {
@@ -181,7 +182,7 @@ inline auto test::stop_callback_dtor_other_thread(Token token, Stop stop) -> voi
181182 Data data;
182183
183184 using CB = ::test_std::stop_callback_for_t <Token, Callback>;
184- ::std::unique_ptr<CB> ptr (new CB (token, &data));
185+ ::std::unique_ptr<CB> ptr (new CB (token, Callback{ &data} ));
185186
186187 ::std::thread thread ([&ptr, &data] {
187188 {
@@ -210,19 +211,23 @@ inline auto test::stop_callback_dtor_same_thread(Token token, Stop stop) -> void
210211 // - Then the deregistration does not block.
211212 // Reference: [stoptoken.concepts] p4
212213 struct Base {
214+ Base () = default ;
215+ Base (Base&&) = delete ;
213216 virtual ~Base () = default ;
214217 };
215218 struct Callback {
216219 ::std::unique_ptr<Base>* self;
217- Callback (::std::unique_ptr<Base>* self) : self(self) {}
220+ explicit Callback (::std::unique_ptr<Base>* self) : self(self) {}
221+ Callback (Callback const &) = default ;
222+ Callback (Callback&&) = default ;
218223 auto operator ()() { this ->self ->reset (); }
219224 };
220225 struct Object : Base {
221226 ::test_std::stop_callback_for_t <Token, Callback> cb;
222- Object (Token token, ::std::unique_ptr<Base>* self) : cb(token, self) {}
227+ Object (Token token, ::std::unique_ptr<Base>* self) : cb(std::move( token), Callback{ self} ) {}
223228 };
224229 ::std::unique_ptr<Base> ptr;
225- ptr.reset (new Object (token, &ptr));
230+ ptr.reset (new Object (std::move ( token) , &ptr));
226231
227232 ::std::atomic<bool > done{};
228233 ::std::thread thread ([&done] {
0 commit comments