diff --git a/include/__config b/include/__config index 4ad700e23..32e542bd1 100644 --- a/include/__config +++ b/include/__config @@ -1126,6 +1126,10 @@ _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container( # define _LIBCPP_HAS_NO_IS_AGGREGATE #endif +#if !defined(__cpp_coroutines) || __cpp_coroutines < 201703L +# define _LIBCPP_HAS_NO_COROUTINES +#endif + #endif // __cplusplus // Decide whether to use availability macros. diff --git a/include/experimental/coroutine b/include/experimental/coroutine index 161f95bde..a2ac9937e 100644 --- a/include/experimental/coroutine +++ b/include/experimental/coroutine @@ -59,7 +59,7 @@ template struct hash>; #pragma GCC system_header #endif -#ifndef __cpp_coroutines +#ifdef _LIBCPP_HAS_NO_COROUTINES # if defined(_LIBCPP_WARNING) _LIBCPP_WARNING(" cannot be used with this compiler") # else @@ -67,6 +67,8 @@ template struct hash>; # endif #endif +#ifndef _LIBCPP_HAS_NO_COROUTINES + _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_COROUTINES template @@ -88,8 +90,6 @@ struct _LIBCPP_TEMPLATE_VIS coroutine_traits template class _LIBCPP_TEMPLATE_VIS coroutine_handle; -#if defined(__cpp_coroutines) - template <> class _LIBCPP_TEMPLATE_VIS coroutine_handle { public: @@ -235,8 +235,6 @@ struct _LIBCPP_TYPE_VIS suspend_always { void await_resume() const noexcept {} }; -#endif // defined(__cpp_coroutines) - _LIBCPP_END_NAMESPACE_EXPERIMENTAL_COROUTINES _LIBCPP_BEGIN_NAMESPACE_STD @@ -251,4 +249,6 @@ struct hash<_VSTD_CORO::coroutine_handle<_Tp> > { _LIBCPP_END_NAMESPACE_STD +#endif // !defined(_LIBCPP_HAS_NO_COROUTINES) + #endif /* _LIBCPP_EXPERIMENTAL_COROUTINE */