//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef __LIBCPP___COROUTINE_TRIVIAL_AWAITABLES_H
#define __LIBCPP___COROUTINE_TRIVIAL_AWAITABLES_H

#include <__config>
#include <__coroutine/coroutine_handle.h>

#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#  pragma GCC system_header
#endif

#if _LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_CXX20_COROUTINES)

_LIBCPP_BEGIN_NAMESPACE_STD

// [coroutine.trivial.awaitables]
struct suspend_never {
    _LIBCPP_HIDE_FROM_ABI
    constexpr bool await_ready() const noexcept { return true; }
    _LIBCPP_HIDE_FROM_ABI
    constexpr void await_suspend(coroutine_handle<>) const noexcept {}
    _LIBCPP_HIDE_FROM_ABI
    constexpr void await_resume() const noexcept {}
};

struct suspend_always {
    _LIBCPP_HIDE_FROM_ABI
    constexpr bool await_ready() const noexcept { return false; }
    _LIBCPP_HIDE_FROM_ABI
    constexpr void await_suspend(coroutine_handle<>) const noexcept {}
    _LIBCPP_HIDE_FROM_ABI
    constexpr void await_resume() const noexcept {}
};

_LIBCPP_END_NAMESPACE_STD

#endif // __LIBCPP_STD_VER > 17 && !defined(_LIBCPP_HAS_NO_CXX20_COROUTINES)

#endif // __LIBCPP___COROUTINE_TRIVIAL_AWAITABLES_H
