|
200 | 200 |
|
201 | 201 | <p class="text-right"><small> |
202 | 202 | 最終更新日時(UTC): |
203 | | - <span itemprop="datePublished" content="2025-07-08T15:33:39"> |
204 | | - 2025年07月08日 15時33分39秒 |
| 203 | + <span itemprop="datePublished" content="2026-02-17T03:19:01"> |
| 204 | + 2026年02月17日 03時19分01秒 |
205 | 205 | </span> |
206 | 206 | <br/> |
207 | 207 | <span itemprop="author" itemscope itemtype="http://schema.org/Person"> |
|
246 | 246 | <span class="n">forward_list</span><span class="p">(</span><span class="k">const</span> <span class="n">forward_list</span><span class="o">&</span> <span class="n">x</span><span class="p">);</span> <span class="c1">// (6) C++11</span> |
247 | 247 | <span class="n">forward_list</span><span class="p">(</span><span class="n">forward_list</span><span class="o">&&</span> <span class="n">x</span><span class="p">);</span> <span class="c1">// (7) C++11</span> |
248 | 248 |
|
249 | | -<span class="n">forward_list</span><span class="p">(</span><span class="k">const</span> <span class="n">forward_list</span><span class="o">&</span> <span class="n">x</span><span class="p">,</span> <span class="k">const</span> <span class="n">Allocator</span><span class="o">&</span> <span class="n">a</span><span class="p">);</span> <span class="c1">// (8) C++11</span> |
250 | | -<span class="n">forward_list</span><span class="p">(</span><span class="n">forward_list</span><span class="o">&&</span> <span class="n">x</span><span class="p">,</span> <span class="k">const</span> <span class="n">Allocator</span><span class="o">&</span> <span class="n">a</span><span class="p">);</span> <span class="c1">// (9) C++11</span> |
| 249 | +<span class="n">forward_list</span><span class="p">(</span><span class="k">const</span> <span class="n">forward_list</span><span class="o">&</span> <span class="n">x</span><span class="p">,</span> <span class="k">const</span> <span class="n">Allocator</span><span class="o">&</span> <span class="n">a</span><span class="p">);</span> <span class="c1">// (8) C++11</span> |
| 250 | +<span class="n">forward_list</span><span class="p">(</span><span class="k">const</span> <span class="n">forward_list</span><span class="o">&</span> <span class="n">x</span><span class="p">,</span> |
| 251 | + <span class="k">const</span> <span class="n"><a href="../../type_traits/type_identity.html">type_identity_t</a></span><span class="o"><</span><span class="n">Allocator</span><span class="o">>&</span> <span class="n">a</span><span class="p">);</span> <span class="c1">// (8) C++23</span> |
| 252 | + |
| 253 | +<span class="n">forward_list</span><span class="p">(</span><span class="n">forward_list</span><span class="o">&&</span> <span class="n">x</span><span class="p">,</span> <span class="k">const</span> <span class="n">Allocator</span><span class="o">&</span> <span class="n">a</span><span class="p">);</span> <span class="c1">// (9) C++11</span> |
| 254 | +<span class="n">forward_list</span><span class="p">(</span><span class="n">forward_list</span><span class="o">&&</span> <span class="n">x</span><span class="p">,</span> |
| 255 | + <span class="k">const</span> <span class="n"><a href="../../type_traits/type_identity.html">type_identity_t</a></span><span class="o"><</span><span class="n">Allocator</span><span class="o">>&</span> <span class="n">a</span><span class="p">);</span> <span class="c1">// (9) C++23</span> |
251 | 256 |
|
252 | 257 | <span class="n">forward_list</span><span class="p">(</span><span class="n"><a href="../../initializer_list/initializer_list.html">initializer_list</a></span><span class="o"><</span><span class="n">T</span><span class="o">></span> <span class="n">il</span><span class="p">,</span> |
253 | 258 | <span class="k">const</span> <span class="n">Allocator</span><span class="o">&</span> <span class="n">a</span> <span class="o">=</span> <span class="n">Allocator</span><span class="p">());</span> <span class="c1">// (10) C++11</span> |
@@ -319,6 +324,10 @@ <h2>備考</h2> |
319 | 324 | </code></pre></div> |
320 | 325 | </div></p> |
321 | 326 | </li> |
| 327 | +<li> |
| 328 | +<p>C++23 では、(8) と (9) のアロケータパラメータの型が <code>const Allocator&</code> から <code>const type_identity_t<Allocator>&</code> に変更された。 |
| 329 | + これは、クラステンプレートのテンプレート引数推論 (CTAD) の際に、コピー/ムーブ元の <code>forward_list</code> から推論される <code>Allocator</code> と、アロケータ引数から推論される型が異なる場合に推論が失敗する問題を修正するためである。<code><a href="../../type_traits/type_identity.html">type_identity_t</a></code> で包むことで、アロケータ引数が非推論コンテキストとなり、アロケータの型はコピー/ムーブ元のみから推論されるようになる。</p> |
| 330 | +</li> |
322 | 331 | </ul> |
323 | 332 | <h2>例</h2> |
324 | 333 | <p><div class="yata" id="4d7b9efc6d4043bdc35a7838d8dbe98999818860"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../iostream.html"><iostream></a></span><span class="cp"></span> |
@@ -405,6 +414,10 @@ <h2>参照</h2> |
405 | 414 | <li><a href="http://cplusplus.github.io/LWG/lwg-defects.html#2210" target="_blank">LWG 2210. Missing allocator-extended constructor for allocator-aware containers</a><br /> |
406 | 415 | <code>explicit forward_list(size_type n)</code> にアロケータ引数を追加するきっかけとなったレポート<br /> |
407 | 416 | なお、Discussion の例はアロケータの型が誤っているので注意</li> |
| 417 | +<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html" target="_blank">P1518R2 Stop Overconstraining Allocators in Container Deduction Guides</a><ul> |
| 418 | +<li>C++23でのアロケータ引数を<code>type_identity_t</code>で包む変更</li> |
| 419 | +</ul> |
| 420 | +</li> |
408 | 421 | </ul></div> |
409 | 422 |
|
410 | 423 | </div> |
|
0 commit comments