Scroll to navigation

std::generator::promise_type::yield_value(3) C++ Standard Libary std::generator::promise_type::yield_value(3)

NAME

std::generator::promise_type::yield_value - std::generator::promise_type::yield_value

Synopsis


std::suspend_always yield_value( yielded val ) noexcept; (1) (since
C++23)
auto yield_value( const std::remove_reference_t<yielded>& lval )


requires std::is_rvalue_reference_v<yielded> && (2) (since
std::constructible_from<std::remove_cvref_t<yielded>, C++23)


const std::remove_reference_t<yielded>&>;
template< class R2, class V2, class Alloc2, class Unused >


requires std::same_as<typename std::generator<T2, V2, (since
Alloc2>::yielded, yielded> (3) C++23)
auto yield_value( ranges::elements_of<std::generator<T2, V2, Alloc2>&&,


Unused> g ) noexcept;
template< ranges::input_range R, class Alloc >
(since
requires std::convertible_to<ranges::range_reference_t<R>, yielded> (4) C++23)


auto yield_value( ranges::elements_of<R, Alloc> r ) noexcept;


An implementation of coroutine interface functions used internally to support
operator co_yield.


(yielded is a reference type defined in std::generator.)


1) Assigns std::addressof(val) to value_. Returns {}.
2) Returns an awaitable object of an unspecified type that stores an object of type
std::remove_cvref_t<yielded> direct-non-list-initialized with lval, whose member
functions are configures so that value_ points to that stored object. Then suspends
the coroutine.
3) Let x be some generator object.


Returns an awaitable object of an unspecified type into which g.range is moved,


* whose member await_ready returns false,
* whose member await_suspend pushes g.range.coroutine_ into *x.active_ and
* resumes execution of the coroutine referred to by g.range.coroutine_, and
* whose member await_resume evaluates


* std::rethrow_exception(except_) if bool(except_) is true.
* If bool(except_) is false, the await_resume member has no effects.
The coroutine referred to by g.range.coroutine_ must be suspended at its initial
suspend point. Otherwise the behavior is undefined.
4) Equivalent to:


auto nested = [](std::allocator_arg_t, Alloc, ranges::iterator_t<R> i,
ranges::sentinel_t<R> s) ->
std::generator<yielded, ranges::range_value_t<R>, Alloc>
{
for (; i != s; ++i)
co_yield static_cast<yielded>(*i);
};


return yield_value(ranges::elements_of(nested(
allocator_arg, r.allocator, ranges::begin(r.range), ranges::end(r.range))));


2,3) A handle referring to the coroutine whose promise object is *this must be at
the top of *active_ of some generator object. Otherwise the behavior is undefined.
2-4) A yield-expression that calls these overload has the type void.

Parameters


val - a value which is a result of the yield-expression evaluation
lval - an lvalue which is a result of the yield-expression evaluation
g - a range of elements produced by a generator
r - a range of elements

Return value


1) The awaitable object of type std::suspend_always.
2-4) An awaitable object of an unspecified type as described above.

Exceptions


2) May throw any exception thrown by the initialization of the stored object.

2024.06.10 http://cppreference.com