Example terrible API: You have to create a socket for a new connection before calling async_accept. Try using this with coroutines.
> opt-in support for futures via a special callback type.
Which is ugly. The coroutines opt-in as well. Coroutines actually have the potential to be faster than callbacks.
For many applications where C++ is used, promises and futures introduce unnecessary overhead. On the other hand an ASIO-like interface works just fine.
Additionally, ASIO, and by extension the network proposal, have transparent opt-in support for futures via a special callback type.