Skip to content

Commit 94fe33b

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 204086d commit 94fe33b

15 files changed

Lines changed: 9761 additions & 6372 deletions

implementation-status.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,8 @@
165165
<p class="text-right"><small>
166166
最終更新日時:
167167
<time itemprop="datePublished" class="js-local-time"
168-
datetime="2026-09-07T11:43:54+09:00">
169-
2026年09月07日 11時43分54秒 (JST)
168+
datetime="2026-09-07T12:00:37+09:00">
169+
2026年09月07日 12時00分37秒 (JST)
170170
</time>
171171
<br/>
172172
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -2172,8 +2172,8 @@ <h2><a href="#cpp26" id="cpp26">C++26言語機能の実装状況</a></h2>
21722172
<td></td>
21732173
</tr>
21742174
<tr>
2175-
<td>P3726R2: <span href="https://cpprefjp.github.io/lang/cpp26/adjustments_to_union_lifetime_rules.md.nolink">共用体の生存期間ルールの調整</span></td>
2176-
<td><code>union</code>メンバの活性化や生存期間に関する規則を整理して<code>constexpr</code>評価などの一貫性を改善する</td>
2175+
<td>P3726R2: <a href="lang/cpp26/adjustments_to_union_lifetime_rules.html">共用体メンバの生存期間規則の調整</a></td>
2176+
<td>共用体の先頭メンバの生存期間を暗黙に開始する規則を撤回して<code>std::start_lifetime()</code>による明示的な開始へ変更し、生存期間外の要素を含む配列メンバを定数式で許可する</td>
21772177
<td></td>
21782178
<td></td>
21792179
<td></td>

lang/cpp26.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,8 @@
177177
<p class="text-right"><small>
178178
最終更新日時:
179179
<time itemprop="datePublished" class="js-local-time"
180-
datetime="2026-09-02T14:38:23+09:00">
181-
2026年09月02日 14時38分23秒 (JST)
180+
datetime="2026-09-07T12:00:37+09:00">
181+
2026年09月07日 12時00分37秒 (JST)
182182
</time>
183183
<br/>
184184
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -339,8 +339,8 @@ <h3>クラス</h3>
339339
<td>非トリビアルな型をメンバにもつ共用体のデフォルトコンストラクタとデストラクタをトリビアルにし、未初期化ストレージとして使用可能にする</td>
340340
</tr>
341341
<tr>
342-
<td><span href="https://cpprefjp.github.io/lang/cpp26/adjustments_to_union_lifetime_rules.md.nolink">共用体の生存期間ルールの調整</span></td>
343-
<td><code>union</code>メンバの活性化や生存期間に関する規則を整理して<code>constexpr</code>評価などの一貫性を改善する</td>
342+
<td><a href="cpp26/adjustments_to_union_lifetime_rules.html">共用体メンバの生存期間規則の調整</a></td>
343+
<td>共用体の先頭メンバの生存期間を暗黙に開始する規則を撤回して<code>std::start_lifetime()</code>による明示的な開始へ変更し、生存期間外の要素を含む配列メンバを定数式で許可する</td>
344344
</tr>
345345
<tr>
346346
<td><a href="cpp26/clarifying_placement_new_deallocation.html">配置newの解放処理を明確化</a></td>

lang/cpp26/adjustments_to_union_lifetime_rules.html

Lines changed: 370 additions & 0 deletions
Large diffs are not rendered by default.

lang/cpp26/feature_test_macros.html

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@
189189
<p class="text-right"><small>
190190
最終更新日時:
191191
<time itemprop="datePublished" class="js-local-time"
192-
datetime="2026-09-02T14:38:23+09:00">
193-
2026年09月02日 14時38分23秒 (JST)
192+
datetime="2026-09-07T12:00:37+09:00">
193+
2026年09月07日 12時00分37秒 (JST)
194194
</time>
195195
<br/>
196196
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -326,8 +326,8 @@ <h3>言語機能</h3>
326326
</tr>
327327
<tr>
328328
<td><code>__cpp_trivial_union</code></td>
329-
<td><code>202502L</code></td>
330-
<td><a href="trivial_unions.html">共用体の特殊メンバ関数のトリビアル化</a></td>
329+
<td><code>202603L</code></td>
330+
<td><a href="trivial_unions.html">共用体の特殊メンバ関数のトリビアル化</a> (<code>202502L</code>)。<a href="adjustments_to_union_lifetime_rules.html">共用体メンバの生存期間規則の調整</a> (<code>202603L</code>)</td>
331331
</tr>
332332
<tr>
333333
<td><code>__cpp_variadic_friend</code></td>
@@ -1027,6 +1027,12 @@ <h3>ライブラリ</h3>
10271027
<td><code><a href="../../reference/span.html">&lt;span&gt;</a></code></td>
10281028
</tr>
10291029
<tr>
1030+
<td><code>__cpp_lib_start_lifetime</code></td>
1031+
<td><code>202603L</code></td>
1032+
<td><code><a href="../../reference/memory.html">&lt;memory&gt;</a></code>に、オブジェクトの生存期間を明示的に開始する<code><a href="../../reference/memory/start_lifetime.html">std::start_lifetime()</a></code>を追加</td>
1033+
<td><code><a href="../../reference/memory.html">&lt;memory&gt;</a></code></td>
1034+
</tr>
1035+
<tr>
10301036
<td><code>__cpp_lib_stdbit_h</code></td>
10311037
<td><code>202603L</code></td>
10321038
<td><code><a href="../../reference/stdbit.h.html">&lt;stdbit.h&gt;</a></code>ヘッダがC++から使用可能であることを示す</td>
@@ -1282,6 +1288,10 @@ <h2>参照</h2>
12821288
<li>C++26で、<code>__cpp_lib_submdspan</code><code>202603L</code>に更新された</li>
12831289
</ul>
12841290
</li>
1291+
<li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3726r2.html" target="_blank">P3726R2 Adjustments to Union Lifetime Rules</a><ul>
1292+
<li>C++26の共用体生存期間規則の調整により、<code>__cpp_trivial_union</code><code>202603L</code>に更新され、<code>__cpp_lib_start_lifetime</code>が追加された</li>
1293+
</ul>
1294+
</li>
12851295
<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4206r0.html" target="_blank">P4206R0 Revert string support in <code>std::constant_wrapper</code></a><ul>
12861296
<li><code><a href="../../reference/utility/constant_wrapper.html">std::constant_wrapper</a></code>の文字列リテラルサポートが取り消されたことにより、<code>__cpp_lib_constant_wrapper</code><code>202603L</code>から<code>202606L</code>に更新された。規格としてはC++29のワーキングドラフトへ適用されたが、C++26で追加された機能に対する欠陥報告 (DR) であるため、C++26へ遡及して適用される</li>
12871297
</ul>

lang/cpp26/trivial_unions.html

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868

6969
</head>
7070
<body>
71-
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;cpp&#34;: [&#34;cpp26&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;ebad28136dd0620bfc92fd3b73979cc8635d6d09&#34;, &#34;source&#34;: &#34;#include &lt;cassert&gt;\n#include &lt;memory&gt; // std::construct_at()\n\nconstexpr int f() {\n union { int s[4]; };\n // s\u306f\u6697\u9ed9\u7684\u5bff\u547d\u578b\u306e\u914d\u5217\u306a\u306e\u3067\u3001\u5bff\u547d\u304c\u958b\u59cb\u3055\u308c\u30a2\u30af\u30c6\u30a3\u30d6\u30e1\u30f3\u30d0\u3068\u306a\u308b\n std::construct_at(&amp;s[0], 1);\n std::construct_at(&amp;s[1], 2);\n std::construct_at(&amp;s[2], 3);\n return s[0] + s[1] + s[2];\n}\n\nint main() {\n static_assert(f() == 6);\n}\n&#34;}], &#34;page_id&#34;: [&#34;lang&#34;, &#34;cpp26&#34;, &#34;trivial_unions&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;cpp&#34;: [&#34;cpp26&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;f59aa2bfdbc23ba555e7d8997d53f68ed0573d1a&#34;, &#34;source&#34;: &#34;#include &lt;cassert&gt;\n#include &lt;memory&gt; // std::construct_at(), std::start_lifetime()\n\nconstexpr int f() {\n union { int s[4]; };\n // \u914d\u5217s\u81ea\u4f53\u306e\u5bff\u547d\u3092\u660e\u793a\u7684\u306b\u958b\u59cb\u3057\u3001\u30a2\u30af\u30c6\u30a3\u30d6\u30e1\u30f3\u30d0\u306b\u3059\u308b\n std::start_lifetime(s);\n std::construct_at(&amp;s[0], 1);\n std::construct_at(&amp;s[1], 2);\n std::construct_at(&amp;s[2], 3);\n return s[0] + s[1] + s[2];\n}\n\nint main() {\n static_assert(f() == 6);\n}\n&#34;}], &#34;page_id&#34;: [&#34;lang&#34;, &#34;cpp26&#34;, &#34;trivial_unions&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -189,12 +189,12 @@
189189
<p class="text-right"><small>
190190
最終更新日時:
191191
<time itemprop="datePublished" class="js-local-time"
192-
datetime="2026-08-08T21:05:00+09:00">
193-
2026年08月08日 21時05分00秒 (JST)
192+
datetime="2026-09-07T12:00:37+09:00">
193+
2026年09月07日 12時00分37秒 (JST)
194194
</time>
195195
<br/>
196196
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
197-
<span itemprop="name">rotarymars</span>
197+
<span itemprop="name">Akira Takahashi</span>
198198
</span>
199199
が更新
200200
</small></p>
@@ -253,7 +253,10 @@ <h2>概要</h2>
253253

254254
<span class="w"> </span><span class="c1">// C++23まで: unionのコンストラクタ/デストラクタが削除されるためコンパイルエラー</span>
255255
<span class="w"> </span><span class="c1">// C++26: OK。unionのコンストラクタ/デストラクタはトリビアル</span>
256-
<span class="w"> </span><span class="k">constexpr</span><span class="w"> </span><span class="n">FixedVector</span><span class="p">()</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">default</span><span class="p">;</span>
256+
<span class="w"> </span><span class="k">constexpr</span><span class="w"> </span><span class="n">FixedVector</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
257+
<span class="w"> </span><span class="c1">// 配列storage自体の生存期間を明示的に開始する(要素の生存期間は開始されない)</span>
258+
<span class="w"> </span><span class="n"><a href="../../reference/memory/start_lifetime.html">std::start_lifetime</a></span><span class="p">(</span><span class="n">storage</span><span class="p">);</span>
259+
<span class="w"> </span><span class="p">}</span>
257260

258261
<span class="w"> </span><span class="k">constexpr</span><span class="w"> </span><span class="o">~</span><span class="n">FixedVector</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
259262
<span class="w"> </span><span class="n"><a href="../../reference/memory/destroy.html">std::destroy</a></span><span class="p">(</span><span class="n">storage</span><span class="p">,</span><span class="w"> </span><span class="n">storage</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">size</span><span class="p">);</span>
@@ -272,7 +275,10 @@ <h3>デフォルトコンストラクタの規則</h3>
272275
<ul>
273276
<li>デフォルトメンバ初期化子をもつメンバがない</li>
274277
</ul>
275-
<p>トリビアルなデフォルトコンストラクタは、いかなる初期化も実行しない。ただし、共用体の最初の選択肢 (variant member) が暗黙的寿命型 (implicit-lifetime type) の場合は、そのオブジェクトの寿命が開始され、アクティブメンバとなる。</p>
278+
<p>トリビアルなデフォルトコンストラクタは、いかなる初期化も実行せず、どのメンバの寿命も開始しない。メンバの寿命は<code><a href="../../reference/memory/start_lifetime.html">std::start_lifetime()</a></code>などで明示的に開始する。</p>
279+
<ul>
280+
<li>本提案の当初の仕様では「共用体の最初の選択肢 (variant member) が暗黙的寿命型 (implicit-lifetime type) の場合、トリビアルなデフォルトコンストラクタがそのメンバの寿命を暗黙に開始する」とされていたが、この規則はABI破壊などの問題があったため、<a href="adjustments_to_union_lifetime_rules.html">P3726R2で撤回された</a></li>
281+
</ul>
276282
<p><div class="codehilite"><pre><span></span><code><span class="c1">// トリビアルデフォルトコンストラクタ、トリビアルデストラクタ</span>
277283
<span class="c1">// sの寿命は開始されない</span>
278284
<span class="k">union</span><span class="w"> </span><span class="nc">U1</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n"><a href="../../reference/string/basic_string.html">std::string</a></span><span class="w"> </span><span class="n">s</span><span class="p">;</span><span class="w"> </span><span class="p">};</span>
@@ -282,7 +288,7 @@ <h3>デフォルトコンストラクタの規則</h3>
282288
<span class="k">union</span><span class="w"> </span><span class="nc">U2</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n"><a href="../../reference/string/basic_string.html">std::string</a></span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"hello"</span><span class="p">;</span><span class="w"> </span><span class="p">};</span>
283289

284290
<span class="c1">// トリビアルデフォルトコンストラクタ、トリビアルデストラクタ</span>
285-
<span class="c1">// s (配列は暗黙的寿命型) の寿命が開始され、アクティブメンバとなる</span>
291+
<span class="c1">// sの寿命は開始されない(P3726R2により、配列でも暗黙開始はされない)</span>
286292
<span class="k">union</span><span class="w"> </span><span class="nc">U3</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n"><a href="../../reference/string/basic_string.html">std::string</a></span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">10</span><span class="p">];</span><span class="w"> </span><span class="p">};</span>
287293
</code></pre></div>
288294
</p>
@@ -300,12 +306,13 @@ <h3>デストラクタの規則</h3>
300306
</p>
301307
<h3>constexprでの使用</h3>
302308
<p>この変更により、共用体を未初期化ストレージとして<code>constexpr</code>の文脈で使用できるようになる。</p>
303-
<p><div class="yata" id="ebad28136dd0620bfc92fd3b73979cc8635d6d09"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../../reference/cassert.html">&lt;cassert&gt;</a></span>
304-
<span class="cp">#include <a href="../../reference/memory.html">&lt;memory&gt;</a> </span><span class="c1">// <a href="../../reference/memory/construct_at.html">std::construct_at</a>()</span>
309+
<p><div class="yata" id="f59aa2bfdbc23ba555e7d8997d53f68ed0573d1a"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../../reference/cassert.html">&lt;cassert&gt;</a></span>
310+
<span class="cp">#include <a href="../../reference/memory.html">&lt;memory&gt;</a> </span><span class="c1">// <a href="../../reference/memory/construct_at.html">std::construct_at</a>(), <a href="../../reference/memory/start_lifetime.html">std::start_lifetime</a>()</span>
305311

306312
<span class="k">constexpr</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">f</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
307313
<span class="w"> </span><span class="k">union</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="mi">4</span><span class="p">];</span><span class="w"> </span><span class="p">};</span>
308-
<span class="w"> </span><span class="c1">// sは暗黙的寿命型の配列なので、寿命が開始されアクティブメンバとなる</span>
314+
<span class="w"> </span><span class="c1">// 配列s自体の寿命を明示的に開始し、アクティブメンバにする</span>
315+
<span class="w"> </span><span class="n"><a href="../../reference/memory/start_lifetime.html">std::start_lifetime</a></span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
309316
<span class="w"> </span><span class="n"><a href="../../reference/memory/construct_at.html">std::construct_at</a></span><span class="p">(</span><span class="o">&amp;</span><span class="n">s</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
310317
<span class="w"> </span><span class="n"><a href="../../reference/memory/construct_at.html">std::construct_at</a></span><span class="p">(</span><span class="o">&amp;</span><span class="n">s</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
311318
<span class="w"> </span><span class="n"><a href="../../reference/memory/construct_at.html">std::construct_at</a></span><span class="p">(</span><span class="o">&amp;</span><span class="n">s</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
@@ -338,10 +345,16 @@ <h2><a href="#relative-page" id="relative-page">関連項目</a></h2>
338345
<li><a href="constexpr_placement_new.html">C++26 <code>constexpr</code>配置<code>new</code></a></li>
339346
<li><a href="allowing_exception_throwing_in_constant-evaluation.html">C++26 定数評価での例外送出を許可</a></li>
340347
<li><code><a href="../../reference/inplace_vector/inplace_vector.html">std::inplace_vector</a></code></li>
348+
<li><a href="adjustments_to_union_lifetime_rules.html">C++26 共用体メンバの生存期間規則の調整</a></li>
349+
<li><code><a href="../../reference/memory/start_lifetime.html">std::start_lifetime()</a></code></li>
341350
</ul>
342351
<h2>参照</h2>
343352
<ul>
344353
<li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3074r7.html" target="_blank">P3074R7 trivial unions (was std::uninitialized)</a></li>
354+
<li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3726r2.html" target="_blank">P3726R2 Adjustments to Union Lifetime Rules</a><ul>
355+
<li>先頭メンバの寿命の暗黙開始を撤回し、<code><a href="../../reference/memory/start_lifetime.html">std::start_lifetime()</a></code>による明示的な開始へ変更した</li>
356+
</ul>
357+
</li>
345358
</ul></div>
346359

347360
</div>

0 commit comments

Comments
 (0)