generator<int> macht find zu einer Genteratorfunktion
Stack-Frame wird nach Beendigung der Funktion entfernt
Stack-Frame bleibt erhalten, wenn die Coroutine unterbrochen wird
Eine Funktion ist eine Coroutine, wenn ..
co_awaitco_yieldco_return.. in ihrer Definition verwendet wird.
co_await eigentlich?Expression
Compiler generiert
await_ready: soll die Coroutine unterbrochen werden?await_suspend: bereitet Unterbrechung vorawait_resume: bereitet Fortführung vor
Beispiel
-start-
Hello
-resume-
Coroutine
-end-
Compiler erzeugt Speicher für das Coroutine-Frame:
Zugriff durch std::coroutine_handle<..>
std::coroutine_handle<..> erfüllt NullablePointer Konzept
-start-
Hello
-resume-
Coroutine
value: 13279348532
-end-
-start-
Hello
-resume-
Coroutine
value: 42
-end-
co_yield eigentlich?Expression
Compiler generiert
1
2
Anpassung von bestehenden Typen
Awaitable Transformation
co_await operator overload
custom allocation
stackful "emulation"