#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(ctx.coroutine>()) ); writefln( "generator is generator: %s", bool(ctx.coroutine>()) ); generator &gr = *ctx.coroutine>(); writefln("value of cast back generator: %s", gr.value()); } /* generator test generated: 5 generated: 10 generated: 15 generated: 20 generated: 25 */