File: pr94528.C

package info (click to toggle)
gcc-arm-none-eabi 15%3A14.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,099,328 kB
  • sloc: cpp: 3,627,108; ansic: 2,571,498; ada: 834,230; f90: 235,082; makefile: 79,231; asm: 74,984; xml: 51,692; exp: 39,736; sh: 33,298; objc: 15,629; python: 15,069; fortran: 14,429; pascal: 7,003; awk: 5,070; perl: 3,106; ml: 285; lisp: 253; lex: 204; haskell: 135
file content (64 lines) | stat: -rw-r--r-- 1,788 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//  { dg-additional-options "-std=c++20 -fpreprocessed -w" }
namespace std {
inline namespace {
template <typename _Result, typename> struct coroutine_traits {
  using promise_type = _Result::promise_type;
};
template <typename = void> struct coroutine_handle;
template <> struct coroutine_handle<> { public: };
template <typename> struct coroutine_handle : coroutine_handle<> {};
struct suspend_always {
  bool await_ready();
  void await_suspend(coroutine_handle<>);
  void await_resume();
};
} // namespace
} // namespace std
namespace coro = std;
namespace cppcoro {
class task {
private:
  struct awaitable_base {
    coro::coroutine_handle<> m_coroutine;
    bool await_ready() const noexcept;
    void await_suspend(coro::coroutine_handle<> awaitingCoroutine) noexcept;
  };

public:
  auto operator co_await() const &noexcept {
    struct awaitable : awaitable_base {
      decltype(auto) await_resume() {}
    };
    return awaitable{m_coroutine};
  }

private:
  coro::coroutine_handle<> m_coroutine;
};
class shared_task;
class shared_task_promise_base {
  struct final_awaiter {
    bool await_ready() const noexcept;
    template <typename PROMISE>
    void await_suspend(coro::coroutine_handle<PROMISE> h) noexcept;
    void await_resume() noexcept;
  };

public:
  coro::suspend_always initial_suspend() noexcept;
  final_awaiter final_suspend() noexcept;
  void unhandled_exception() noexcept;
};
class shared_task_promise : public shared_task_promise_base {
public:
  shared_task get_return_object() noexcept;
  void return_void() noexcept;
};
class shared_task {
public:
  using promise_type = shared_task_promise;
};
auto make_shared_task(cppcoro::task awaitable) -> shared_task {
  co_return co_await static_cast<cppcoro::task &&>(awaitable);
}
} // namespace cppcoro