15class [[nodiscard(
"Must wait/await tasks")]]
Task {
23 promise->register_owning_ptr(&promise);
26 if (promise) promise->destroy();
28 PromiseT* operator->() {
return promise; }
36 TaskT& operator=(
const TaskT& o) {
40 TaskT& operator=(TaskT&& o) {
46 Task(
const TaskT& o) { *
this = o; };
47 Task(TaskT&& o)
noexcept { *
this = std::move(o); };
49 operator bool()
const {
return (
bool)prom; };
51 bool done()
const {
return promise().done(); }
52 virtual void resume() { promise().resume(); }
53 virtual void wait() { promise().wait(); }
57 if constexpr (!std::is_same_v<T, void>) {
58 return promise().result();
63 mutable std::shared_ptr<PromiseHolder> prom;
64 PromiseT& promise()
const {
66 return *(prom->promise);