1*7a6aaf9bSLouis Dionne //===----------------------------------------------------------------------===// 2*7a6aaf9bSLouis Dionne // 3*7a6aaf9bSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*7a6aaf9bSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 5*7a6aaf9bSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*7a6aaf9bSLouis Dionne // 7*7a6aaf9bSLouis Dionne //===----------------------------------------------------------------------===// 8*7a6aaf9bSLouis Dionne 9*7a6aaf9bSLouis Dionne // <thread> 10*7a6aaf9bSLouis Dionne 11*7a6aaf9bSLouis Dionne // class thread 12*7a6aaf9bSLouis Dionne 13*7a6aaf9bSLouis Dionne // thread& operator=(thread&& t); 14*7a6aaf9bSLouis Dionne 15*7a6aaf9bSLouis Dionne #include <thread> 16*7a6aaf9bSLouis Dionne #include <new> 17*7a6aaf9bSLouis Dionne #include <cstdlib> 18*7a6aaf9bSLouis Dionne #include <cassert> 19*7a6aaf9bSLouis Dionne 20*7a6aaf9bSLouis Dionne class G 21*7a6aaf9bSLouis Dionne { 22*7a6aaf9bSLouis Dionne int alive_; 23*7a6aaf9bSLouis Dionne public: 24*7a6aaf9bSLouis Dionne static int n_alive; 25*7a6aaf9bSLouis Dionne static bool op_run; 26*7a6aaf9bSLouis Dionne 27*7a6aaf9bSLouis Dionne G() : alive_(1) {++n_alive;} 28*7a6aaf9bSLouis Dionne G(const G& g) : alive_(g.alive_) {++n_alive;} 29*7a6aaf9bSLouis Dionne ~G() {alive_ = 0; --n_alive;} 30*7a6aaf9bSLouis Dionne 31*7a6aaf9bSLouis Dionne void operator()() 32*7a6aaf9bSLouis Dionne { 33*7a6aaf9bSLouis Dionne assert(alive_ == 1); 34*7a6aaf9bSLouis Dionne assert(n_alive >= 1); 35*7a6aaf9bSLouis Dionne op_run = true; 36*7a6aaf9bSLouis Dionne } 37*7a6aaf9bSLouis Dionne 38*7a6aaf9bSLouis Dionne }; 39*7a6aaf9bSLouis Dionne 40*7a6aaf9bSLouis Dionne int G::n_alive = 0; 41*7a6aaf9bSLouis Dionne bool G::op_run = false; 42*7a6aaf9bSLouis Dionne 43*7a6aaf9bSLouis Dionne int main(int, char**) 44*7a6aaf9bSLouis Dionne { 45*7a6aaf9bSLouis Dionne { 46*7a6aaf9bSLouis Dionne std::thread t0(G()); 47*7a6aaf9bSLouis Dionne std::thread t1; 48*7a6aaf9bSLouis Dionne t1 = t0; 49*7a6aaf9bSLouis Dionne } 50*7a6aaf9bSLouis Dionne 51*7a6aaf9bSLouis Dionne return 0; 52*7a6aaf9bSLouis Dionne } 53