int main() { test_throwing_new_during_thread_creation(); { std::thread t(f); t.join(); assert(f_run == true); } { assert(G::n_alive == 0); assert(!G::op_run); std::thread t((G())); t.join(); assert(G::n_alive == 0); assert(G::op_run); } G::op_run = false; { try { throw_one = 0; assert(G::n_alive == 0); assert(!G::op_run); std::thread t((G())); assert(false); } catch (...) { throw_one = 0xFFFF; assert(G::n_alive == 0); assert(!G::op_run); } } #if TEST_STD_VER >= 11 { assert(G::n_alive == 0); assert(!G::op_run); std::thread t(G(), 5, 5.5); t.join(); assert(G::n_alive == 0); assert(G::op_run); } { std::thread t = std::thread(MoveOnly(), MoveOnly()); t.join(); } #endif }
int main(int, char**) { test_throwing_new_during_thread_creation(); { std::thread t(f); t.join(); assert(f_run == true); } { assert(G::n_alive == 0); assert(!G::op_run); { G g; std::thread t(g); t.join(); } assert(G::n_alive == 0); assert(G::op_run); } G::op_run = false; #ifndef TEST_HAS_NO_EXCEPTIONS // The test below expects `std::thread` to call `new`, which may not be the // case for all implementations. LIBCPP_ASSERT(numAllocs > 0); // libc++ should call new. if (numAllocs > 0) { try { throw_one = 0; assert(G::n_alive == 0); assert(!G::op_run); std::thread t((G())); assert(false); } catch (std::bad_alloc const&) { throw_one = 0xFFFF; assert(G::n_alive == 0); assert(!G::op_run); } } #endif #if TEST_STD_VER >= 11 { assert(G::n_alive == 0); assert(!G::op_run); { G g; std::thread t(g, 5, 5.5); t.join(); } assert(G::n_alive == 0); assert(G::op_run); } { std::thread t = std::thread(MoveOnly(), MoveOnly()); t.join(); } #endif return 0; }