Let e be the operand of the yield-expression and
p be an lvalue naming the promise object of the enclosing
coroutine ([dcl.fct.def.coroutine]), then the yield-expression
is equivalent to the expression
co_awaitp.yield_value(e).
[Example 1: template<typename T>struct my_generator {struct promise_type {
T current_value;
/* ... */auto yield_value(T v){
current_value = std::move(v);
return std::suspend_always{};
}};
struct iterator {/* ... */};
iterator begin();
iterator end();
};
my_generator<pair<int,int>> g1(){for(int i =0; i <10; ++i)co_yield{i,i};
}
my_generator<pair<int,int>> g2(){for(int i =0; i <10; ++i)co_yield make_pair(i,i);
}auto f(int x =co_yield5); // error: yield-expression outside of function suspension contextint a[]={co_yield1}; // error: yield-expression outside of function suspension contextint main(){auto r1 = g1();
auto r2 = g2();
assert(std::equal(r1.begin(), r1.end(), r2.begin(), r2.end()));
} — end example]