xref: /llvm-project/libcxx/include/__cxx03/coroutine (revision ce7771902dc50d900de639d499a60486b83f70e0)
1e78f53d1SNikolas Klauser// -*- C++ -*-
2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===//
3e78f53d1SNikolas Klauser//
4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information.
6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7e78f53d1SNikolas Klauser//
8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===//
9e78f53d1SNikolas Klauser
10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_COROUTINE
11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_COROUTINE
12e78f53d1SNikolas Klauser
13e78f53d1SNikolas Klauser/**
14e78f53d1SNikolas Klauser    coroutine synopsis
15e78f53d1SNikolas Klauser
16e78f53d1SNikolas Klausernamespace std {
17e78f53d1SNikolas Klauser// [coroutine.traits]
18e78f53d1SNikolas Klausertemplate <class R, class... ArgTypes>
19e78f53d1SNikolas Klauser  struct coroutine_traits;
20e78f53d1SNikolas Klauser// [coroutine.handle]
21e78f53d1SNikolas Klausertemplate <class Promise = void>
22e78f53d1SNikolas Klauser  struct coroutine_handle;
23e78f53d1SNikolas Klauser// [coroutine.handle.compare]
24e78f53d1SNikolas Klauserconstexpr bool operator==(coroutine_handle<> x, coroutine_handle<> y) noexcept;
25e78f53d1SNikolas Klauserconstexpr strong_ordering operator<=>(coroutine_handle<> x, coroutine_handle<> y) noexcept;
26e78f53d1SNikolas Klauser// [coroutine.handle.hash]
27e78f53d1SNikolas Klausertemplate <class T> struct hash;
28e78f53d1SNikolas Klausertemplate <class P> struct hash<coroutine_handle<P>>;
29e78f53d1SNikolas Klauser// [coroutine.noop]
30e78f53d1SNikolas Klauserstruct noop_coroutine_promise;
31e78f53d1SNikolas Klausertemplate<> struct coroutine_handle<noop_coroutine_promise>;
32e78f53d1SNikolas Klauserusing noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;
33e78f53d1SNikolas Klausernoop_coroutine_handle noop_coroutine() noexcept;
34e78f53d1SNikolas Klauser// [coroutine.trivial.awaitables]
35e78f53d1SNikolas Klauserstruct suspend_never;
36e78f53d1SNikolas Klauserstruct suspend_always;
37e78f53d1SNikolas Klauser} // namespace std
38e78f53d1SNikolas Klauser
39e78f53d1SNikolas Klauser */
40e78f53d1SNikolas Klauser
4173fbae83SNikolas Klauser#include <__cxx03/__config>
42e78f53d1SNikolas Klauser
43e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 20
4473fbae83SNikolas Klauser#  include <__cxx03/__coroutine/coroutine_handle.h>
4573fbae83SNikolas Klauser#  include <__cxx03/__coroutine/coroutine_traits.h>
4673fbae83SNikolas Klauser#  include <__cxx03/__coroutine/noop_coroutine_handle.h>
4773fbae83SNikolas Klauser#  include <__cxx03/__coroutine/trivial_awaitables.h>
48e78f53d1SNikolas Klauser#endif // _LIBCPP_STD_VER >= 20
49e78f53d1SNikolas Klauser
5073fbae83SNikolas Klauser#include <__cxx03/version>
51e78f53d1SNikolas Klauser
52e78f53d1SNikolas Klauser// standard-mandated includes
53e78f53d1SNikolas Klauser
54e78f53d1SNikolas Klauser// [coroutine.syn]
5573fbae83SNikolas Klauser#include <__cxx03/compare>
56e78f53d1SNikolas Klauser
57e78f53d1SNikolas Klauser#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
58e78f53d1SNikolas Klauser#  pragma GCC system_header
59e78f53d1SNikolas Klauser#endif
60e78f53d1SNikolas Klauser
61e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
6273fbae83SNikolas Klauser#  include <__cxx03/iosfwd>
6373fbae83SNikolas Klauser#  include <__cxx03/limits>
6473fbae83SNikolas Klauser#  include <__cxx03/type_traits>
65e78f53d1SNikolas Klauser#endif
66e78f53d1SNikolas Klauser
67*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_COROUTINE
68