Namespaces
Variants

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

From cppreference.net
Standard library headers

Cet en-tête fait partie de la bibliothèque de support du langage .

Table des matières

Inclusions

(C++20)
Support de l'opérateur de comparaison à trois voies

Classes

type trait pour découvrir les types de promesses de coroutines
(modèle de classe)
utilisé pour faire référence à une coroutine suspendue ou en cours d'exécution
(modèle de classe)
prise en charge du hachage pour std::coroutine_handle
(spécialisation de modèle de classe)
Coroutines No-op
utilisé pour les coroutines sans effets observables
(classe)
std:: coroutine_handle < std:: noop_coroutine_promise > , destiné à référencer une coroutine sans opération
(typedef)
Awaitables Triviaux
indique qu'une expression await ne doit jamais se suspendre
(classe)
indique qu'une expression await doit toujours se suspendre
(classe)

Fonctions

compare deux objets coroutine_handle
(fonction)
Coroutines No-op
crée un gestionnaire de coroutine qui n'a aucun effet observable lorsqu'il est repris ou détruit
(fonction)

Synopsis

#include <compare>
namespace std {
  // traits de coroutine
  template<class R, class... ArgTypes>
    struct coroutine_traits;
  // handle de coroutine
  template<class Promise = void>
    struct coroutine_handle;
  // opérateurs de comparaison
  constexpr bool operator==(coroutine_handle<> x, coroutine_handle<> y) noexcept;
  constexpr strong_ordering operator<=>(coroutine_handle<> x, 
                                        coroutine_handle<> y) noexcept;
  // support de hachage
  template<class T> struct hash;
  template<class P> struct hash<coroutine_handle<P>>;
  // coroutines no-op
  struct 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;
  // awaitables triviaux
  struct suspend_never;
  struct suspend_always;
}

Modèle de classe std::coroutine_handle

namespace std {
  template<>
  struct coroutine_handle<void>
  {
    // construction/réinitialisation
    constexpr coroutine_handle() noexcept;
    constexpr coroutine_handle(nullptr_t) noexcept;
    coroutine_handle& operator=(nullptr_t) noexcept;
    // exportation/importation
    constexpr void* address() const noexcept;
    static constexpr coroutine_handle from_address(void* addr);
    // observateurs
    constexpr explicit operator bool() const noexcept;
    bool done() const;
    // reprise
    void operator()() const;
    void resume() const;
    void destroy() const;
  private:
    void* ptr;  // exposition uniquement
  };
  template<class Promise>
  struct coroutine_handle
  {
    // construction/réinitialisation
    constexpr coroutine_handle() noexcept;
    constexpr coroutine_handle(nullptr_t) noexcept;
    static coroutine_handle from_promise(Promise&);
    coroutine_handle& operator=(nullptr_t) noexcept;
    // exportation/importation
    constexpr void* address() const noexcept;
    static constexpr coroutine_handle from_address(void* addr);
    // conversion
    constexpr operator coroutine_handle<>() const noexcept;
    // observateurs
    constexpr explicit operator bool() const noexcept;
    bool done() const;
    // reprise
    void operator()() const;
    void resume() const;
    void destroy() const;
    // accès à la promesse
    Promise& promise() const;
  private:
    void* ptr;  // exposition uniquement
  };
}

Classe std::noop_coroutine_promise

namespace std {
  struct noop_coroutine_promise {};
}
**Note:** Le code C++ n'a pas été traduit car il se trouve dans des balises `
` et contient des termes spécifiques au C++ qui doivent être préservés selon les instructions. Seul le texte environnant aurait été traduit s'il y en avait eu.

Classe std:: coroutine_handle < std:: noop_coroutine_promise >

namespace std {
  template<>
  struct coroutine_handle<noop_coroutine_promise>
  {
    // conversion
    constexpr operator coroutine_handle<>() const noexcept;
    // observateurs
    constexpr explicit operator bool() const noexcept;
    constexpr bool done() const noexcept;
    // reprise
    constexpr void operator()() const noexcept;
    constexpr void resume() const noexcept;
    constexpr void destroy() const noexcept;
    // accès à la promesse
    noop_coroutine_promise& promise() const noexcept;
    // adresse
    constexpr void* address() const noexcept;
  private:
    coroutine_handle(/* non spécifié */);
    void* ptr; // exposition uniquement
  };
}

Classe std::suspend_never

namespace std {
  struct suspend_never {
    constexpr bool await_ready() const noexcept { return true; }
    constexpr void await_suspend(coroutine_handle<>) const noexcept {}
    constexpr void await_resume() const noexcept {}
  };
}
**Note:** Le code C++ n'a pas été traduit car il se trouve dans des balises `
` et contient des termes spécifiques au C++ qui doivent être préservés selon les instructions. Seul le texte environnant (s'il y en avait) aurait été traduit en français.

Classe std::suspend_always

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