24 promise->register_owning_ptr(&promise);
27 if (promise) promise->destroy();
29 PromiseT* operator->() {
return promise; }
37 TaskT& operator=(
const TaskT& o) {
41 TaskT& operator=(TaskT&& o) {
47 Task(
const TaskT& o) { *
this = o; };
48 Task(TaskT&& o)
noexcept { *
this = std::move(o); };
50 operator bool()
const {
return (
bool)prom; };
52 bool done()
const {
return promise().done(); }
53 virtual void resume() { promise().resume(); }
54 virtual void wait() { promise().wait(); }
58 return promise().result();
62 mutable std::shared_ptr<PromiseHolder> prom;
63 PromiseT& promise()
const {
65 return *(prom->promise);