Skip to content

Commit eb4d735

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 19d4230 commit eb4d735

File tree

5 files changed

+358
-2605
lines changed

5 files changed

+358
-2605
lines changed

reference/functional/bind_back.html

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,12 @@
188188

189189
<p class="text-right"><small>
190190
最終更新日時(UTC):
191-
<span itemprop="datePublished" content="2024-03-10T02:30:08">
192-
2024年03月10日 02時30分08秒
191+
<span itemprop="datePublished" content="2025-04-03T06:49:54">
192+
2025年04月03日 06時49分54秒
193193
</span>
194194
<br/>
195195
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
196-
<span itemprop="name">Tetsuro Matsumura</span>
196+
<span itemprop="name">yoh</span>
197197
</span>
198198
が更新
199199
</small></p>
@@ -215,30 +215,49 @@
215215
<div class="identifier-type">function template</div><div class="header">&lt;functional&gt;</div><h1 itemprop="name"><span class="namespace" title="namespace std">std::</span><span class="token">bind_back</span><span class="cpp cpp23" title="C++23で追加">(C++23)</span></h1>
216216
<div itemprop="articleBody"><p><div class="codehilite"><pre><span></span><code><span class="k">namespace</span> <span class="n">std</span> <span class="p">{</span>
217217
<span class="k">template</span> <span class="o">&lt;</span><span class="k">class</span> <span class="nc">F</span><span class="p">,</span> <span class="n">class</span><span class="p">...</span> <span class="n">Args</span><span class="o">&gt;</span>
218-
<span class="k">constexpr</span> <span class="n"><i>unspecified</i></span> <span class="n">bind_back</span><span class="p">(</span><span class="n">F</span><span class="o">&amp;&amp;</span><span class="p">,</span> <span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...);</span>
218+
<span class="k">constexpr</span> <span class="n"><i>unspecified</i></span> <span class="n">bind_back</span><span class="p">(</span><span class="n">F</span><span class="o">&amp;&amp;</span> <span class="n">f</span><span class="p">,</span> <span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (1) C++23</span>
219+
220+
<span class="k">template</span> <span class="o">&lt;</span><span class="k">auto</span> <span class="n">f</span><span class="p">,</span> <span class="n">class</span><span class="p">...</span> <span class="n">Args</span><span class="o">&gt;</span>
221+
<span class="k">constexpr</span> <span class="n"><i>unspecified</i></span> <span class="n">bind_back</span><span class="p">(</span><span class="n">Args</span><span class="o">&amp;&amp;</span><span class="p">...</span> <span class="n">args</span><span class="p">);</span> <span class="c1">// (2) C++26</span>
219222
<span class="p">}</span>
220223
</code></pre></div>
221224
</p>
222225
<h2>概要</h2>
223226
<p>関数の引数を末尾から順に部分適用する。</p>
224227
<p>先頭から適用する場合は<code><a href="bind_front.html">bind_front</a></code>を用いる。</p>
225-
<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Constraints。関数であればオーバーロード解決に参加するための条件、それ以外であれば受け付ける型の条件">テンプレートパラメータ制約</a></h2>
226-
<p><code><a href="../type_traits/decay.html">decay_t</a>&lt;F&gt;</code>を適用した型を<code>FD</code>
227-
<code><a href="../type_traits/decay.html">std::decay_t</a>&lt;Args&gt;...</code>を適用した型パラメータパックを<code>BoundArgs</code>であるとして、</p>
228+
<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Preconditions。関数呼び出し時に満たされていると関数が想定する条件。満たさなければ未定義の動作。契約属性の`[[expects]]`に相当">事前条件</a></h2>
229+
<p><code><a href="../type_traits/decay.html">decay_t</a>&lt;F&gt;</code>を適用した型を<code>FD</code><code><a href="../type_traits/decay.html">decay_t</a>&lt;Args&gt;...</code>を適用した型パラメータパックを<code>BoundArgs</code>として</p>
228230
<ul>
229-
<li><code>FD</code><code><a href="../concepts/move_constructible.html">std::move_constructible</a></code>要件を満たすこと</li>
230-
<li><code>BoundArgs</code>のそれぞれの型<code>Ti</code><a href="../type_traits/is_object.html">オブジェクト型</a>である場合、<code><a href="../concepts/move_constructible.html">std::move_constructible</a></code>要件を満たすこと</li>
231+
<li>(1) : <ul>
232+
<li><code>FD</code>がCpp17MoveConstructible要件を満たすこと</li>
233+
<li><code>BoundArgs</code>のそれぞれの型<code>Ti</code><a href="../type_traits/is_object.html">オブジェクト型</a>である場合、Cpp17MoveConstructible要件を満たすこと</li>
234+
</ul>
235+
</li>
236+
<li>(2) :<ul>
237+
<li><code>BoundArgs</code>のそれぞれの型<code>Ti</code>がCpp17MoveConstructible要件を満たすこと</li>
238+
</ul>
239+
</li>
231240
</ul>
232241
<h2><a class="cpprefjp-defined-word" data-desc="関数等の意味論を構成する要素の1つ。Mandates。満たさなければプログラムが不適格となる要件。この要件は、オーバーロード解決によって選択された関数内での`static_assert`の定数条件式や、関数に対するdelete宣言などで表現できる">適格要件</a></h2>
233242
<ul>
234-
<li><code><a href="../type_traits/conjunction.html">conjunction_v</a>&lt;<a href="../type_traits/is_constructible.html">is_constructible</a>&lt;FD, F&gt;, <a href="../type_traits/is_move_constructible.html">is_move_constructible</a>&lt;FD&gt;, <a href="../type_traits/is_constructible.html">is_constructible</a>&lt;BoundArgs, Args&gt;..., <a href="../type_traits/is_move_constructible.html">is_move_constructible</a>&lt;BoundArgs&gt;...&gt;</code><code>true</code>であること</li>
243+
<li>(1) :<ul>
244+
<li><code><a href="../type_traits/is_constructible.html">is_constructible_v</a>&lt;FD, F&gt; &amp;&amp; <a href="../type_traits/is_move_constructible.html">is_move_constructible_v</a>&lt;FD&gt; &amp;&amp; (<a href="../type_traits/is_constructible.html">is_constructible_v</a>&lt;BoundArgs, Args&gt; &amp;&amp; ...) &amp;&amp; (<a href="../type_traits/is_move_constructible.html">is_move_constructible_v</a>&lt;BoundArgs&gt; &amp;&amp; ...)</code><code>true</code>であること</li>
245+
</ul>
246+
</li>
247+
<li>(2) : <code>F</code><code>f</code>の型として<ul>
248+
<li><code>(<a href="../type_traits/is_constructible.html">is_constructible_v</a>&lt;BoundArgs, Args&gt; &amp;&amp; ...)</code><code>true</code>、かつ</li>
249+
<li><code>(<a href="../type_traits/is_move_constructible.html">is_move_constructible_v</a>&lt;BoundArgs&gt; &amp;&amp; ...)</code><code>true</code>、かつ</li>
250+
<li>もし<code><a href="../type_traits/is_pointer.html">is_poinetr_v</a>&lt;F&gt; || <a href="../type_traits/is_member_pointer.html">is_member_poinetr_v</a>&lt;F&gt;</code><code>true</code>ならば、<code>f != nullptr</code>であること</li>
251+
</ul>
252+
</li>
235253
</ul>
236254
<h2><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価結果となるオブジェクト・値">戻り値</a></h2>
237255
<p>呼び出し可能な<code>f</code><code><a href="invoke.html">std::invoke()</a></code>で呼び出した時に必要な引数列に後方一致する<code>f</code><code>args...</code>を完全転送して保持し、後から残りの引数リストを渡すことで<code>f</code>を呼び出せる<a class="cpprefjp-defined-word" data-desc="未規定の動作。事前の断りなく処理系によって異なる動作をする" href="../../implementation-compliance.html#dfn-unspecified-behavior">未規定</a>の関数オブジェクトを返す。</p>
238256
<p>返される関数オブジェクトは渡された引数(<code>f, args...</code>)を参照として保持せず、適切にコピー/ムーブして保持する。</p>
239257
<h2><a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a></h2>
240258
<ul>
241-
<li>関数オブジェクト<code>f</code>のムーブによって任意の<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>が送出される可能性がある</li>
259+
<li>(1) : 関数オブジェクト<code>f</code>のムーブによって任意の<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>が送出される可能性がある</li>
260+
<li>(2) : <code>bound_args</code>の初期化による任意の<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>が送出される可能性がある</li>
242261
</ul>
243262
<h2>この機能が必要になった背景・経緯</h2>
244263
<p>C++23で<a href="../ranges/range.html">Rangeアダプタ</a><a class="cpprefjp-defined-word" data-desc="プログラム定義。ユーザー(プログラマ)によって定義されること(標準ライブラリで定義されるものを除く)">ユーザー定義</a>がサポートされた。</p>
@@ -323,6 +342,10 @@ <h2>参照</h2>
323342
<ul>
324343
<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2387r3.html#nanorange" target="_blank">P2387R3 Pipe support for user-defined range adaptors</a></li>
325344
<li><a href="https://onihusube.hatenablog.com/entry/2022/04/24/010041" target="_blank">rangesのパイプにアダプトするには</a></li>
345+
<li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2714r1.html" target="_blank">P2714R1 Bind front and back to NTTP callables</a><ul>
346+
<li>C++26で<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>(2)を追加</li>
347+
</ul>
348+
</li>
326349
</ul></div>
327350

328351
</div>

0 commit comments

Comments
 (0)