1349cc55cSDimitry Andric// -*- C++ -*-
2349cc55cSDimitry Andric//===----------------------------------------------------------------------===//
3349cc55cSDimitry Andric//
4349cc55cSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5349cc55cSDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
6349cc55cSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7349cc55cSDimitry Andric//
8349cc55cSDimitry Andric//===----------------------------------------------------------------------===//
9349cc55cSDimitry Andric
10349cc55cSDimitry Andric#ifndef _LIBCPP_COROUTINE
11349cc55cSDimitry Andric#define _LIBCPP_COROUTINE
12349cc55cSDimitry Andric
13349cc55cSDimitry Andric/**
14349cc55cSDimitry Andric    coroutine synopsis
15349cc55cSDimitry Andric
16349cc55cSDimitry Andricnamespace std {
17349cc55cSDimitry Andric// [coroutine.traits]
18349cc55cSDimitry Andrictemplate <class R, class... ArgTypes>
19349cc55cSDimitry Andric  struct coroutine_traits;
20349cc55cSDimitry Andric// [coroutine.handle]
21349cc55cSDimitry Andrictemplate <class Promise = void>
22349cc55cSDimitry Andric  struct coroutine_handle;
23349cc55cSDimitry Andric// [coroutine.handle.compare]
24349cc55cSDimitry Andricconstexpr bool operator==(coroutine_handle<> x, coroutine_handle<> y) noexcept;
25349cc55cSDimitry Andricconstexpr strong_ordering operator<=>(coroutine_handle<> x, coroutine_handle<> y) noexcept;
26349cc55cSDimitry Andric// [coroutine.handle.hash]
27349cc55cSDimitry Andrictemplate <class T> struct hash;
28349cc55cSDimitry Andrictemplate <class P> struct hash<coroutine_handle<P>>;
29349cc55cSDimitry Andric// [coroutine.noop]
30349cc55cSDimitry Andricstruct noop_coroutine_promise;
31349cc55cSDimitry Andrictemplate<> struct coroutine_handle<noop_coroutine_promise>;
32349cc55cSDimitry Andricusing noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;
33349cc55cSDimitry Andricnoop_coroutine_handle noop_coroutine() noexcept;
34349cc55cSDimitry Andric// [coroutine.trivial.awaitables]
35349cc55cSDimitry Andricstruct suspend_never;
36349cc55cSDimitry Andricstruct suspend_always;
37349cc55cSDimitry Andric} // namespace std
38349cc55cSDimitry Andric
39349cc55cSDimitry Andric */
40349cc55cSDimitry Andric
4181ad6265SDimitry Andric#include <__assert> // all public C++ headers provide the assertion handler
42349cc55cSDimitry Andric#include <__config>
43349cc55cSDimitry Andric#include <__coroutine/coroutine_handle.h>
44349cc55cSDimitry Andric#include <__coroutine/coroutine_traits.h>
4504eeddc0SDimitry Andric#include <__coroutine/noop_coroutine_handle.h>
46349cc55cSDimitry Andric#include <__coroutine/trivial_awaitables.h>
47349cc55cSDimitry Andric#include <version>
48349cc55cSDimitry Andric
4981ad6265SDimitry Andric// standard-mandated includes
50*bdd1243dSDimitry Andric
51*bdd1243dSDimitry Andric// [coroutine.syn]
5281ad6265SDimitry Andric#include <compare>
5381ad6265SDimitry Andric
54349cc55cSDimitry Andric#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
55349cc55cSDimitry Andric#  pragma GCC system_header
56349cc55cSDimitry Andric#endif
57349cc55cSDimitry Andric
58*bdd1243dSDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
59*bdd1243dSDimitry Andric#  include <iosfwd>
60*bdd1243dSDimitry Andric#  include <type_traits>
61*bdd1243dSDimitry Andric#endif
62*bdd1243dSDimitry Andric
63349cc55cSDimitry Andric#endif // _LIBCPP_COROUTINE
64