Namespaces
Variants
Actions

Standard library header <coroutine> (C++20)

From cppreference.com
< cpp‎ | header
 
 
Standard library headers
 

This header is part of the language support library.

Contents

Includes

(C++20)
Three-way comparison operator support[edit]

Classes

trait type for discovering coroutine promise types
(class template)[edit]
used to refer to a suspended or executing coroutine
(class template)[edit]
hash support for std::coroutine_handle
(class template specialization)[edit]
No-op Coroutines
used for coroutines with no observable effects
(class)[edit]
std::coroutine_handle<std::noop_coroutine_promise>, intended to refer to a no-op coroutine
(typedef)[edit]
Trivial Awaitables
indicates that an await-expression should never suspend
(class)[edit]
indicates that an await-expression should always suspend
(class)[edit]

Functions

compares two coroutine_handle objects
(function)[edit]
No-op Coroutines
creates a coroutine handle that has no observable effects when resumed or destroyed
(function)[edit]

[edit]Synopsis

#include <compare>   namespace std {// coroutine traitstemplate<class R, class... ArgTypes>struct coroutine_traits;   // coroutine handletemplate<class Promise =void>struct coroutine_handle;   // comparison operatorsconstexprbool operator==(coroutine_handle<> x, coroutine_handle<> y)noexcept;constexpr strong_ordering operator<=>(coroutine_handle<> x, coroutine_handle<> y)noexcept;   // hash supporttemplate<class T>struct hash;template<class P>struct hash<coroutine_handle<P>>;   // no-op coroutinesstruct noop_coroutine_promise;   template<>struct coroutine_handle<noop_coroutine_promise>;using noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;   noop_coroutine_handle noop_coroutine()noexcept;   // trivial awaitablesstruct suspend_never;struct suspend_always;}

[edit]Class template std::coroutine_handle

namespace std {template<>struct coroutine_handle<void>{// construct/resetconstexpr coroutine_handle()noexcept;constexpr coroutine_handle(nullptr_t)noexcept; coroutine_handle& operator=(nullptr_t)noexcept;   // export/importconstexprvoid* address()constnoexcept;staticconstexpr coroutine_handle from_address(void* addr);   // observersconstexprexplicit operator bool()constnoexcept;bool done()const;   // resumptionvoid operator()()const;void resume()const;void destroy()const;   private:void* ptr;// exposition only};   template<class Promise>struct coroutine_handle {// construct/resetconstexpr coroutine_handle()noexcept;constexpr coroutine_handle(nullptr_t)noexcept;static coroutine_handle from_promise(Promise&); coroutine_handle& operator=(nullptr_t)noexcept;   // export/importconstexprvoid* address()constnoexcept;staticconstexpr coroutine_handle from_address(void* addr);   // conversionconstexpr operator coroutine_handle<>()constnoexcept;   // observersconstexprexplicit operator bool()constnoexcept;bool done()const;   // resumptionvoid operator()()const;void resume()const;void destroy()const;   // promise access Promise& promise()const;   private:void* ptr;// exposition only };}

[edit]Class std::noop_coroutine_promise

namespace std {struct noop_coroutine_promise {};}

[edit]Class std::coroutine_handle<std::noop_coroutine_promise>

namespace std {template<>struct coroutine_handle<noop_coroutine_promise>{// conversionconstexpr operator coroutine_handle<>()constnoexcept;   // observersconstexprexplicit operator bool()constnoexcept;constexprbool done()constnoexcept;   // resumptionconstexprvoid operator()()constnoexcept;constexprvoid resume()constnoexcept;constexprvoid destroy()constnoexcept;   // promise access noop_coroutine_promise& promise()constnoexcept;   // addressconstexprvoid* address()constnoexcept;private: coroutine_handle(/* unspecified */);void* ptr;// exposition only };}

[edit]Class std::suspend_never

namespace std {struct suspend_never {constexprbool await_ready()constnoexcept{returntrue;}constexprvoid await_suspend(coroutine_handle<>)constnoexcept{}constexprvoid await_resume()constnoexcept{}};}

[edit]Class std::suspend_always

namespace std {struct suspend_always {constexprbool await_ready()constnoexcept{returnfalse;}constexprvoid await_suspend(coroutine_handle<>)constnoexcept{}constexprvoid await_resume()constnoexcept{}};}
close