mrs_lib
Various reusable classes, functions and utilities for use in MRS projects
Loading...
Searching...
No Matches
immediate_awaitable.hpp
1#ifndef MRS_LIB_CORO_INTERNAL_IMMEDIATE_AWAITABLE_HPP_
2#define MRS_LIB_CORO_INTERNAL_IMMEDIATE_AWAITABLE_HPP_
3
4
5#include <utility>
6
7
8namespace mrs_lib::coro::internal
9{
10
14 template <typename Awaiter>
15 class [[nodiscard("The result must be awaited, otherwise, it may do NOTHING!!!")]] ImmediateAwaitable
16 {
17
18 public:
20 requires std::default_initializable<Awaiter>
21 = default;
22 ImmediateAwaitable(Awaiter awaiter) : awaiter_(std::move(awaiter))
23 {
24 }
25
26 ~ImmediateAwaitable() = default;
27
30 ImmediateAwaitable& operator=(const ImmediateAwaitable&) = delete;
31 ImmediateAwaitable& operator=(ImmediateAwaitable&&) = delete;
32
33 friend Awaiter operator co_await(ImmediateAwaitable awaitable)
34 {
35 return std::move(awaitable).awaiter_;
36 }
37
38 private:
39 Awaiter awaiter_{};
40 };
41
42} // namespace mrs_lib::coro::internal
43
44
45#endif // MRS_LIB_CORO_INTERNAL_IMMEDIATE_AWAITABLE_HPP_
Helper class to force awaiting a result in the current expression.
Definition immediate_awaitable.hpp:16