#include #include using namespace ostd; int main() { auto f = [](auto yield) { for (int i: range(5, 26, 5)) { yield(i); } }; writeln("generator test"); for (int i: generator{f}) { writefln("generated: %s", i); } generator x{f}; /* coroutine_context exists as a base type for any coroutine */ coroutine_context *ctx = &x; writefln( "generator is coroutine: %s", bool(dynamic_cast *>(ctx)) ); writefln( "generator is generator: %s", bool(dynamic_cast *>(ctx)) ); generator &gr = dynamic_cast &>(*ctx); writefln("value of cast back generator: %s", gr.value()); } /* generator test generated: 5 generated: 10 generated: 15 generated: 20 generated: 25 generator is coroutine: false generator is generator: true value of cast back generator: 5 */