213213 < p class ="text-right "> < small >
214214 最終更新日時:
215215 < time itemprop ="datePublished " class ="js-local-time "
216- datetime ="2026-08-17T16:13:20 +09:00 ">
217- 2026年08月17日 16時13分20秒 (JST)
216+ datetime ="2026-08-17T21:49:31 +09:00 ">
217+ 2026年08月17日 21時49分31秒 (JST)
218218 </ time >
219219 < br />
220220 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
221- < span itemprop ="name "> Akira Takahashi </ span >
221+ < span itemprop ="name "> yoh </ span >
222222 </ span >
223223 が更新
224224 </ small > </ p >
271271< span class ="w "> </ span > < span class ="k "> requires</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../../concepts/same_as.html "> same_as</ a > </ span > < span class ="o "> <</ span > < span class ="k "> typename</ span > < span class ="w "> </ span > < span class ="nc "> < a href ="../../generator.html "> generator</ a > </ span > < span class ="o "> <</ span > < span class ="n "> T2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> V2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Alloc2</ span > < span class ="o "> >::</ span > < span class ="n "> < a href ="../../generator.html "> yielded</ a > </ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../generator.html "> yielded</ a > </ span > < span class ="o "> ></ span >
272272< span class ="k "> auto</ span > < span class ="w "> </ span > < span class ="n "> yield_value</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../../ranges/elements_of.html "> ranges::elements_of</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../../generator.html "> generator</ a > </ span > < span class ="o "> <</ span > < span class ="n "> T2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> V2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Alloc2</ span > < span class ="o "> >&&</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Unused</ span > < span class ="o "> ></ span > < span class ="w "> </ span > < span class ="n "> g</ span > < span class ="p "> )</ span > < span class ="w "> </ span > < span class ="k "> noexcept</ span > < span class ="p "> ;</ span > < span class ="w "> </ span > < span class ="c1 "> // (3)</ span >
273273
274+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="w "> </ span > < span class ="nc "> T2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="k "> class</ span > < span class ="w "> </ span > < span class ="nc "> V2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="k "> class</ span > < span class ="w "> </ span > < span class ="nc "> Alloc2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="k "> class</ span > < span class ="w "> </ span > < span class ="nc "> Unused</ span > < span class ="o "> ></ span >
275+ < span class ="w "> </ span > < span class ="k "> requires</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../../concepts/same_as.html "> same_as</ a > </ span > < span class ="o "> <</ span > < span class ="k "> typename</ span > < span class ="w "> </ span > < span class ="nc "> < a href ="../../generator.html "> generator</ a > </ span > < span class ="o "> <</ span > < span class ="n "> T2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> V2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Alloc2</ span > < span class ="o "> >::</ span > < span class ="n "> < a href ="../../generator.html "> yielded</ a > </ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../generator.html "> yielded</ a > </ span > < span class ="o "> ></ span >
276+ < span class ="k "> auto</ span > < span class ="w "> </ span > < span class ="n "> yield_value</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../../ranges/elements_of.html "> ranges::elements_of</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../../generator.html "> generator</ a > </ span > < span class ="o "> <</ span > < span class ="n "> T2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> V2</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Alloc2</ span > < span class ="o "> >&</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Unused</ span > < span class ="o "> ></ span > < span class ="w "> </ span > < span class ="n "> g</ span > < span class ="p "> )</ span > < span class ="w "> </ span > < span class ="k "> noexcept</ span > < span class ="p "> ;</ span > < span class ="w "> </ span > < span class ="c1 "> // (4)</ span >
277+
274278< span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../../../ranges/input_range.html "> ranges::input_range</ a > </ span > < span class ="w "> </ span > < span class ="n "> Rng</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="k "> class</ span > < span class ="w "> </ span > < span class ="nc "> Alloc</ span > < span class ="o "> ></ span >
275279< span class ="w "> </ span > < span class ="k "> requires</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../../concepts/convertible_to.html "> convertible_to</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../../../ranges/range_reference_t.html "> ranges::range_reference_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Rng</ span > < span class ="o "> ></ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../generator.html "> yielded</ a > </ span > < span class ="o "> ></ span >
276- < span class ="k "> auto</ span > < span class ="w "> </ span > < span class ="n "> yield_value</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../../ranges/elements_of.html "> ranges::elements_of</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Rng</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Alloc</ span > < span class ="o "> ></ span > < span class ="w "> </ span > < span class ="n "> r</ span > < span class ="p "> );</ span > < span class ="w "> </ span > < span class ="c1 "> // (4 )</ span >
280+ < span class ="k "> auto</ span > < span class ="w "> </ span > < span class ="n "> yield_value</ span > < span class ="p "> (</ span > < span class ="n "> < a href ="../../../ranges/elements_of.html "> ranges::elements_of</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Rng</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Alloc</ span > < span class ="o "> ></ span > < span class ="w "> </ span > < span class ="n "> r</ span > < span class ="p "> );</ span > < span class ="w "> </ span > < span class ="c1 "> // (5 )</ span >
277281</ code > </ pre > </ div >
278282</ p >
279283< h2 > 概要</ h2 >
@@ -282,14 +286,15 @@ <h2>概要</h2>
282286< h2 > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Preconditions。関数呼び出し時に満たされていると関数が想定する条件。満たさなければ未定義の動作。契約属性の`[[expects]]`に相当 "> 事前条件</ a > </ h2 >
283287< ul >
284288< li > (2) : Promiseオブジェクトが< code > *this</ code > となる< a href ="../../../coroutine/coroutine_handle.html "> コルーチンへのハンドル</ a > が、ある< a href ="../../generator.html "> < code > generator</ code > オブジェクト</ a > < code > x</ code > のアクティブスタック< code > x.active_</ code > のトップにあること。</ li >
285- < li > (3) : Promiseオブジェクトが< code > *this</ code > となる< a href ="../../../coroutine/coroutine_handle.html "> コルーチンへのハンドル</ a > が、ある< a href ="../../generator.html "> < code > generator</ code > オブジェクト</ a > < code > x</ code > のアクティブスタック< code > x.active_</ code > のトップにあること。ジェネレータ< code > g.range</ code > に対応するコルーチンが、< a href ="initial_suspend.html "> 初期サスペンドポイント</ a > にて中断されていること。</ li >
289+ < li > (3), (4) : Promiseオブジェクトが< code > *this</ code > となる< a href ="../../../coroutine/coroutine_handle.html "> コルーチンへのハンドル</ a > が、ある< a href ="../../generator.html "> < code > generator</ code > オブジェクト</ a > < code > x</ code > のアクティブスタック< code > x.active_</ code > のトップにあること。ジェネレータ< code > g.range</ code > に対応するコルーチンが、< a href ="initial_suspend.html "> 初期サスペンドポイント</ a > にて中断されていること。</ li >
290+ < li > (5) : Promiseオブジェクトが< code > *this</ code > となる< a href ="../../../coroutine/coroutine_handle.html "> コルーチンへのハンドル</ a > が、ある< a href ="../../generator.html "> < code > generator</ code > オブジェクト</ a > < code > x</ code > のアクティブスタック< code > x.active_</ code > のトップにあること。ジェネレータ< code > g.range</ code > に対応するコルーチンが、< a href ="initial_suspend.html "> 初期サスペンドポイント</ a > にて中断されていること。</ li >
286291</ ul >
287292< h2 > 効果</ h2 >
288293< p > (1) : 以下と等価</ p >
289294< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="n "> < a href ="../promise_type.html "> value_</ a > </ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../../memory/addressof.html "> addressof</ a > </ span > < span class ="p "> (</ span > < span class ="n "> val</ span > < span class ="p "> )</ span >
290295</ code > </ pre > </ div >
291296</ p >
292- < p > (4 ) : 以下と等価</ p >
297+ < p > (5 ) : 以下と等価</ p >
293298< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> auto</ span > < span class ="w "> </ span > < span class ="n "> nested</ span > < span class ="w "> </ span > < span class ="o "> =</ span > < span class ="w "> </ span > < span class ="p "> [](</ span > < span class ="n "> < a href ="../../../memory/allocator_arg_t.html "> allocator_arg_t</ a > </ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Alloc</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../../ranges/iterator_t.html "> ranges::iterator_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Rng</ span > < span class ="o "> ></ span > < span class ="w "> </ span > < span class ="n "> i</ span > < span class ="p "> ,</ span >
294299< span class ="w "> </ span > < span class ="n "> < a href ="../../../ranges/sentinel_t.html "> ranges::sentinel_t</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Rng</ span > < span class ="o "> ></ span > < span class ="w "> </ span > < span class ="n "> s</ span > < span class ="p "> )</ span >
295300< span class ="w "> </ span > < span class ="o "> -></ span > < span class ="w "> </ span > < span class ="n "> < a href ="../../generator.html "> generator</ a > </ span > < span class ="o "> <</ span > < span class ="n "> < a href ="../../generator.html "> yielded</ a > </ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="kt "> void</ span > < span class ="p "> ,</ span > < span class ="w "> </ span > < span class ="n "> Alloc</ span > < span class ="o "> ></ span > < span class ="w "> </ span > < span class ="p "> {</ span >
@@ -309,7 +314,7 @@ <h2><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価
309314< li > < a href ="../promise_type.html "> 説明専用メンバ< code > value_</ code > </ a > が保持オブジェクトを指してコルーチンを中断(suspend)するメンバ関数を持つ。</ li >
310315</ ul >
311316</ li >
312- < li > (3) : 以下の動作をする< a class ="cpprefjp-defined-word " data-desc ="未規定の動作。事前の断りなく処理系によって異なる動作をする " href ="../../../../implementation-compliance.html#dfn-unspecified-behavior "> 未規定</ a > の型の< a href ="../../../../lang/cpp20/coroutines.html "> Awaitableオブジェクト</ a > < ul >
317+ < li > (3), (4) : 以下の動作をする< a class ="cpprefjp-defined-word " data-desc ="未規定の動作。事前の断りなく処理系によって異なる動作をする " href ="../../../../implementation-compliance.html#dfn-unspecified-behavior "> 未規定</ a > の型の< a href ="../../../../lang/cpp20/coroutines.html "> Awaitableオブジェクト</ a > < ul >
313318< li > Range< code > < a href ="../../../ranges/elements_of.html "> g.range</ a > </ code > の所有権を受け取る。</ li >
314319< li > メンバ関数< code > await_ready</ code > : < code > false</ code > を返す。</ li >
315320< li > メンバ関数< code > await_suspend</ code > : < code > x</ code > のアクティブスタック< code > *x.active_</ code > に< code > g.range.< a href ="../../../coroutine/coroutine_handle.html "> coroutine_</ a > </ code > をpushしてから< code > g.range.coroutine_</ code > を< a href ="../../../coroutine/coroutine_handle/resume.html "> 再開(resume)</ a > する。</ li >
@@ -321,6 +326,7 @@ <h2><a class="cpprefjp-defined-word" data-desc="問題が発生したときに
321326< ul >
322327< li > (1), (3), (4) : 投げない。</ li >
323328< li > (2) : 格納されるオブジェクトの初期化によって送出された< a class ="cpprefjp-defined-word " data-desc ="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態 "> 例外</ a > 。</ li >
329+ < li > (5) : 効果の中で送出された< a class ="cpprefjp-defined-word " data-desc ="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態 "> 例外</ a > 。</ li >
324330</ ul >
325331< h2 > 備考</ h2 >
326332< p > ジェネレータコルーチンの< code > co_yield</ code > 式は< code > void</ code > 型となる。</ p >
@@ -343,15 +349,15 @@ <h2>関連項目</h2>
343349< h2 > 参照</ h2 >
344350< ul >
345351< li > < a href ="https://cplusplus.github.io/LWG/issue3894 " target ="_blank "> LWG Issue 3894. < code > generator::promise_type::yield_value(ranges::elements_of<Rng, Alloc>)</ code > should not be < code > noexcept</ code > </ a > < ul >
346- < li > C++26で、(4 )から< code > noexcept</ code > が削除された(効果内で< a class ="cpprefjp-defined-word " data-desc ="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態 "> 例外</ a > を送出しうる< code > generator</ code > の構築を行うため)</ li >
352+ < li > C++26で、(5 )から< code > noexcept</ code > が削除された(効果内で< a class ="cpprefjp-defined-word " data-desc ="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態 "> 例外</ a > を送出しうる< code > generator</ code > の構築を行うため)</ li >
347353</ ul >
348354</ li >
349- < li > < a href ="https://cplusplus.github.io/LWG/issue3899 " target ="_blank "> LWG Issue 3899. co_yielding elements of an lvalue generator is unnecessarily inefficient</ a > < ul >
350- < li > C++26で、(4)の効果で用いるネストした < code > generator </ code > の型を < code > generator<yielded, void, Alloc> </ code > に変更し、左辺値 < code > generator </ code > の要素をco_yieldする際の非効率を解消した </ li >
355+ < li > < a href ="https://cplusplus.github.io/LWG/issue3899 " target ="_blank "> LWG Issue 3899. < code > co_yield </ code > ing elements of an lvalue generator is unnecessarily inefficient</ a > < ul >
356+ < li > C++26で、左辺値参照をとる < a class =" cpprefjp-defined-word " data-desc =" 同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合 " > オーバーロード </ a > (4)を追加し、左辺値 < code > generator</ code > の要素を < code > co_yield </ code > する際の非効率性を解消する </ li >
351357</ ul >
352358</ li >
353- < li > < a href ="https://cplusplus.github.io/LWG/issue4119 " target ="_blank "> LWG Issue 4119. < code > generator::promise_type::yield_value(ranges::elements_of<R, Alloc>)</ code > 's nested generator may be ill-formed</ a > < ul >
354- < li > LWG 3899と同じく 、ネストした< code > generator</ code > の型を< code > generator<yielded, void, Alloc></ code > とすることで、要素型が < code > generator</ code > のValue型として< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > になる問題を回避する</ li >
359+ < li > < a href ="https://cplusplus.github.io/LWG/issue4119 " target ="_blank "> LWG Issue 4119. < code > generator::promise_type::yield_value(ranges::elements_of<R, Alloc>)</ code > 's nested < code > generator</ code > may be ill-formed</ a > < ul >
360+ < li > C++26で 、ネストした< code > generator</ code > の型を< code > generator<yielded, void, Alloc></ code > とすることで、< code > generator</ code > のValue型として< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > になる問題を回避する</ li >
355361</ ul >
356362</ li >
357363</ ul > </ div >
0 commit comments