//******************************************************** // The following code example is taken from the book // C++23 - The Complete Guide // by Nicolai M. Josuttis (www.josuttis.com) // http://www.cppstd23.com // // The code is licensed under a // Creative Commons Attribution 4.0 International License // http://creativecommons.org/licenses/by/4.0/ //******************************************************** #include #include #include #include // coroutine that generates random values: std::generator generateRandom() { // init random number generator with random initial state: std::default_random_engine engine{std::random_device{}()}; // init a distribution of values from 1 to 100: std::uniform_int_distribution intDist{1, 100}; // yield endless sequence of random values between 1 and 100: while (true) { co_yield intDist(engine); // SUSPEND the coroutine with the next generated value } } int main() { // iterate over the first 20 values generated by the coroutine view generateRandom(): for (const auto& val : generateRandom() | std::views::take(20)) { std::cout << val << ' '; } std::cout << '\n'; }