xref: /openbsd-src/gnu/llvm/libcxx/include/coroutine (revision 4bdff4bed0e3d54e55670334c7d0077db4170f86)
1*4bdff4beSrobert// -*- C++ -*-
2*4bdff4beSrobert//===----------------------------------------------------------------------===//
3*4bdff4beSrobert//
4*4bdff4beSrobert// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*4bdff4beSrobert// See https://llvm.org/LICENSE.txt for license information.
6*4bdff4beSrobert// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*4bdff4beSrobert//
8*4bdff4beSrobert//===----------------------------------------------------------------------===//
9*4bdff4beSrobert
10*4bdff4beSrobert#ifndef _LIBCPP_COROUTINE
11*4bdff4beSrobert#define _LIBCPP_COROUTINE
12*4bdff4beSrobert
13*4bdff4beSrobert/**
14*4bdff4beSrobert    coroutine synopsis
15*4bdff4beSrobert
16*4bdff4beSrobertnamespace std {
17*4bdff4beSrobert// [coroutine.traits]
18*4bdff4beSroberttemplate <class R, class... ArgTypes>
19*4bdff4beSrobert  struct coroutine_traits;
20*4bdff4beSrobert// [coroutine.handle]
21*4bdff4beSroberttemplate <class Promise = void>
22*4bdff4beSrobert  struct coroutine_handle;
23*4bdff4beSrobert// [coroutine.handle.compare]
24*4bdff4beSrobertconstexpr bool operator==(coroutine_handle<> x, coroutine_handle<> y) noexcept;
25*4bdff4beSrobertconstexpr strong_ordering operator<=>(coroutine_handle<> x, coroutine_handle<> y) noexcept;
26*4bdff4beSrobert// [coroutine.handle.hash]
27*4bdff4beSroberttemplate <class T> struct hash;
28*4bdff4beSroberttemplate <class P> struct hash<coroutine_handle<P>>;
29*4bdff4beSrobert// [coroutine.noop]
30*4bdff4beSrobertstruct noop_coroutine_promise;
31*4bdff4beSroberttemplate<> struct coroutine_handle<noop_coroutine_promise>;
32*4bdff4beSrobertusing noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;
33*4bdff4beSrobertnoop_coroutine_handle noop_coroutine() noexcept;
34*4bdff4beSrobert// [coroutine.trivial.awaitables]
35*4bdff4beSrobertstruct suspend_never;
36*4bdff4beSrobertstruct suspend_always;
37*4bdff4beSrobert} // namespace std
38*4bdff4beSrobert
39*4bdff4beSrobert */
40*4bdff4beSrobert
41*4bdff4beSrobert#include <__assert> // all public C++ headers provide the assertion handler
42*4bdff4beSrobert#include <__config>
43*4bdff4beSrobert#include <__coroutine/coroutine_handle.h>
44*4bdff4beSrobert#include <__coroutine/coroutine_traits.h>
45*4bdff4beSrobert#include <__coroutine/noop_coroutine_handle.h>
46*4bdff4beSrobert#include <__coroutine/trivial_awaitables.h>
47*4bdff4beSrobert#include <version>
48*4bdff4beSrobert
49*4bdff4beSrobert// standard-mandated includes
50*4bdff4beSrobert
51*4bdff4beSrobert// [coroutine.syn]
52*4bdff4beSrobert#include <compare>
53*4bdff4beSrobert
54*4bdff4beSrobert#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
55*4bdff4beSrobert#  pragma GCC system_header
56*4bdff4beSrobert#endif
57*4bdff4beSrobert
58*4bdff4beSrobert#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
59*4bdff4beSrobert#  include <iosfwd>
60*4bdff4beSrobert#  include <type_traits>
61*4bdff4beSrobert#endif
62*4bdff4beSrobert
63*4bdff4beSrobert#endif // _LIBCPP_COROUTINE
64