### C++20 Examples

##### Channels

Example showing how to use a channel in conjunction with C++20 coroutines.

- ../src/examples/cpp20/channels/throttling_proxy.cpp

##### Coroutines

Examples showing how to implement a chain of asynchronous operations using C++20 Coroutines.

- ../src/examples/cpp20/coroutines/echo_server.cpp
- ../src/examples/cpp20/coroutines/echo_server_with_default.cpp
- ../src/examples/cpp20/coroutines/echo_server_with_as_tuple_default.cpp
- ../src/examples/cpp20/coroutines/echo_server_with_as_single_default.cpp
- ../src/examples/cpp20/coroutines/echo_server_with_deferred.cpp
- ../src/examples/cpp20/coroutines/echo_server_with_deferred_default.cpp
- ../src/examples/cpp20/coroutines/refactored_echo_server.cpp
- ../src/examples/cpp20/coroutines/chat_server.cpp
- ../src/examples/cpp20/coroutines/timeout.cpp

##### Operations

Examples showing how to implement composed asynchronous operations as reusable library functions.

- ../src/examples/cpp20/operations/composed_1.cpp
- ../src/examples/cpp20/operations/composed_2.cpp
- ../src/examples/cpp20/operations/composed_3.cpp
- ../src/examples/cpp20/operations/composed_4.cpp
- ../src/examples/cpp20/operations/composed_5.cpp
- ../src/examples/cpp20/operations/composed_6.cpp
- ../src/examples/cpp20/operations/composed_7.cpp
- ../src/examples/cpp20/operations/composed_8.cpp

Examples showing how to expose callback-based APIs as asynchronous operations.

- ../src/examples/cpp20/operations/callback_wrapper.cpp
- ../src/examples/cpp20/operations/c_callback_wrapper.cpp

##### Type Erasure

Example showing how to use `any_completion_handler` to enable separate compilation of asynchronous operations.

- ../src/examples/cpp20/type_erasure/main.cpp
- ../src/examples/cpp20/type_erasure/line_reader.hpp
- ../src/examples/cpp20/type_erasure/stdin_line_reader.hpp
- ../src/examples/cpp20/type_erasure/stdin_line_reader.cpp
- ../src/examples/cpp20/type_erasure/sleep.hpp
- ../src/examples/cpp20/type_erasure/sleep.cpp