boost::promise (so does std::promise) only supports set_value/exception and their at_thread_exit variants, while the at_thread_exit variants support deferred notification, but the point to trigger the notification is restricted to thread-exit. This is not sufficient for, e.g. coroutine usage.
This is the same problem as shown in this post:
If you want to write a "correct" adaptor for boost::future, currently you have to use extra storage when you get the return-value from the coroutine, and set the promise until final_suspend is reached.
To efficiently address the problem, we need something like:
* promise::set_value_deferred
* promise::set_exception_deferred
* promise::notify_deferred
Thoughts?