#include <iostream>
#include <thread>
#include <future>
int main() {
try {
std::promise<void> p;
auto f = p.get_future();
std::thread{[p = std::move(p)] () mutable {
// p.set_value(); // Imagine exception happens
}}.detach();
f.get();
} catch (const std::future_error&) {
// promise broken as expected.
return 0;
}
std::cout << "Promise not broken?\n";
return 1;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8ZnV0dXJlPgoKaW50IG1haW4oKSB7CiAgICB0cnkgewogICAgICAgIHN0ZDo6cHJvbWlzZTx2b2lkPiBwOwogICAgICAgIGF1dG8gZiA9IHAuZ2V0X2Z1dHVyZSgpOwogICAgICAgIHN0ZDo6dGhyZWFke1twID0gc3RkOjptb3ZlKHApXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgLy8gcC5zZXRfdmFsdWUoKTsgLy8gSW1hZ2luZSBleGNlcHRpb24gaGFwcGVucwogICAgICAgIH19LmRldGFjaCgpOwogICAgICAgIGYuZ2V0KCk7CiAgICB9IGNhdGNoIChjb25zdCBzdGQ6OmZ1dHVyZV9lcnJvciYpIHsKICAgICAgICAvLyBwcm9taXNlIGJyb2tlbiBhcyBleHBlY3RlZC4KICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIHN0ZDo6Y291dCA8PCAiUHJvbWlzZSBub3QgYnJva2VuP1xuIjsKICAgIHJldHVybiAxOwp9