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