C++ async model is too complicated (and not cost free as claimed, since it allocates memory for the coroutine state) and as such it wasn't widely adopted. I don't see any code using C++ async (apart from libraries implementing "tasks" in various forms). At this point I view it as a failed experiment. My bet is that executors are going to replace async completely.
> since it allocates memory for the coroutine state
Heap allocation is not required, just the default.
You can do static allocation if you wish, though it is a little more complicated than typical static allocation due to the relative unpredictability.
Nah, it was originally based on .NET async/await model, having been proposed by Microsoft, and initially experienced in WinRT/UWP async runtime.
So anyone that has experience in such model, including the awaitable magic methods, can grasp it.
While not cost free, the optimisers are expected to elide the cost most of the time.