最終更新日時(UTC):
が更新

履歴 編集

function template
<generator>

std::generator::promise_type::yield_value(C++23)

suspend_always yield_value(yielded val) noexcept; // (1)

auto yield_value(const remove_reference_t<yielded>& lval)
  requires is_rvalue_reference_v<yielded> &&
    constructible_from<remove_cvref_t<yielded>, const remove_reference_t<yielded>&>;  // (2)

template<class T2, class V2, class Alloc2, class Unused>
  requires same_as<typename generator<T2, V2, Alloc2>::yielded, yielded>
auto yield_value(ranges::elements_of<generator<T2, V2, Alloc2>&&, Unused> g) noexcept; // (3)

template<ranges::input_range Rng, class Alloc>
  requires convertible_to<ranges::range_reference_t<Rng>, yielded>
auto yield_value(ranges::elements_of<Rng, Alloc> r) noexcept; // (4)

概要

ジェネレータコルーチンにおけるco_yield式の動作を制御する。 プログラマが本関数を直接利用することは想定されていない。

事前条件

効果

(1) : 以下と等価

(4) : 以下と等価

auto nested = [](allocator_arg_t, Alloc, ranges::iterator_t<Rng> i,
                 ranges::sentinel_t<Rng> s)
  -> generator<yielded, ranges::range_value_t<Rng>, 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))));

戻り値

例外

  • (1),(3),(4) : 投げない。
  • (2) : 格納されるオブジェクトの初期化によって送出された例外。

備考

ジェネレータコルーチンのco_yield式はvoid型となる。

バージョン

言語

  • C++23

処理系

関連項目