receive_buffer<T>::receive still has T as result type. As discussed a few days ago, this should be changed to future<T> and the unwrapping should be handled at the calling site. For example with implict ctors like future<T>::future(future<future> &&) or unwrapping in clients.