#include <iostream>
#include <thread>
#include <vector>
#include <future>
class Test {
public:
std::thread t;
std::unique_ptr<std::promise<int>> pp;
Test(std::thread&& rt, std::unique_ptr<std::promise<int>>&& rpp)
: t(std::move(rt)), pp(std::move(rpp))
{ }
};
int main()
{
std::vector<Test> tests;
{
auto pp = std::make_unique<std::promise<int>>();
std::thread t ([p = pp.get()]{
std::cout << 1;
p->set_value(1);
});
tests.push_back(Test(std::move(t), std::move(pp)));
}
for(Test& mytest : tests)
{
mytest.t.join();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZnV0dXJlPgoKY2xhc3MgVGVzdCB7ICAgICAgICAKICAgIHB1YmxpYzoKICAgIHN0ZDo6dGhyZWFkIHQ7CiAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpwcm9taXNlPGludD4+IHBwOwogICAgVGVzdChzdGQ6OnRocmVhZCYmIHJ0LCBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpwcm9taXNlPGludD4+JiYgcnBwKQogICAgICA6IHQoc3RkOjptb3ZlKHJ0KSksIHBwKHN0ZDo6bW92ZShycHApKSAKICAgIHsgfQp9OwoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxUZXN0PiB0ZXN0czsKCiAgICB7CiAgICAgICAgYXV0byBwcCA9IHN0ZDo6bWFrZV91bmlxdWU8c3RkOjpwcm9taXNlPGludD4+KCk7CiAgICAgICAgc3RkOjp0aHJlYWQgdCAoW3AgPSBwcC5nZXQoKV17CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAxOwogICAgICAgICAgICBwLT5zZXRfdmFsdWUoMSk7CiAgICAgICAgfSk7CiAgICAgICAgdGVzdHMucHVzaF9iYWNrKFRlc3Qoc3RkOjptb3ZlKHQpLCBzdGQ6Om1vdmUocHApKSk7CiAgICB9ICAKCiAgICBmb3IoVGVzdCYgbXl0ZXN0IDogdGVzdHMpCiAgICB7CiAgICAgICAgbXl0ZXN0LnQuam9pbigpOwogICAgfQoKfQo=