This document discusses asynchronous functions in C++. It proposes a generic approach to allow functions to be executed asynchronously without being dependent on the specific asynchronous medium. The approach defines traits for different asynchronous mediums to provide a common interface for creating and managing asynchronous tasks. This includes creating and waiting on tasks, checking completion status, and collecting results in a portable way across mediums like threads, thread pools, message queues etc.