Skip to content

Commit 6d24ad2

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent 9d36590 commit 6d24ad2

File tree

3 files changed

+77
-41
lines changed

3 files changed

+77
-41
lines changed

lang/cpp26/trivial_unions.html

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@
188188

189189
<p class="text-right"><small>
190190
最終更新日時(UTC):
191-
<span itemprop="datePublished" content="2026-04-06T09:01:01">
192-
2026年04月06日 09時01分01秒
191+
<span itemprop="datePublished" content="2026-04-06T09:09:22">
192+
2026年04月06日 09時09分22秒
193193
</span>
194194
<br/>
195195
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -220,23 +220,23 @@ <h1 itemprop="name"><span class="token">共用体の特殊メンバ関数のト
220220
<h2>概要</h2>
221221
<p>C++26では、共用体 (<code>union</code>) のデフォルトコンストラクタとデストラクタの規則を変更し、より多くの場合にトリビアル (trivial) となるようにする。</p>
222222
<p>これにより、非トリビアルな型のメンバをもつ共用体を未初期化のストレージとして<code>constexpr</code>の文脈で使用できるようになる。</p>
223-
<p><div class="codehilite"><pre><span></span><code><span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="k">typename</span><span class="w"> </span><span class="nc">T</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">N</span><span class="o">&gt;</span>
223+
<p><div class="codehilite"><pre><span></span><code><span class="k">template</span><span class="w"> </span><span class="o">&lt;</span><span class="k">typename</span><span class="w"> </span><span class="nc">T</span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../../reference/cstddef/size_t.html">std::size_t</a></span><span class="w"> </span><span class="n">N</span><span class="o">&gt;</span>
224224
<span class="k">struct</span><span class="w"> </span><span class="nc">FixedVector</span><span class="w"> </span><span class="p">{</span>
225-
<span class="w"> </span><span class="k">union</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="n">storage</span><span class="p">[</span><span class="n">N</span><span class="p">];</span><span class="w"> </span><span class="p">};</span>
226-
<span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
225+
<span class="w"> </span><span class="k">union</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">T</span><span class="w"> </span><span class="n">storage</span><span class="p">[</span><span class="n">N</span><span class="p">];</span><span class="w"> </span><span class="p">};</span>
226+
<span class="w"> </span><span class="n"><a href="../../reference/cstddef/size_t.html">std::size_t</a></span><span class="w"> </span><span class="n">size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
227227

228-
<span class="w"> </span><span class="c1">// C++23まで: unionのコンストラクタ/デストラクタが削除されるためコンパイルエラー</span>
229-
<span class="w"> </span><span class="c1">// C++26: OK。unionのコンストラクタ/デストラクタはトリビアル</span>
230-
<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>
228+
<span class="w"> </span><span class="c1">// C++23まで: unionのコンストラクタ/デストラクタが削除されるためコンパイルエラー</span>
229+
<span class="w"> </span><span class="c1">// C++26: OK。unionのコンストラクタ/デストラクタはトリビアル</span>
230+
<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>
231231

232-
<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>
233-
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">destroy</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>
234-
<span class="w"> </span><span class="p">}</span>
232+
<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>
233+
<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>
234+
<span class="w"> </span><span class="p">}</span>
235235

236-
<span class="w"> </span><span class="k">constexpr</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">push_back</span><span class="p">(</span><span class="n">T</span><span class="w"> </span><span class="k">const</span><span class="o">&amp;</span><span class="w"> </span><span class="n">v</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
237-
<span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">construct_at</span><span class="p">(</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><span class="w"> </span><span class="n">v</span><span class="p">);</span>
238-
<span class="w"> </span><span class="o">++</span><span class="n">size</span><span class="p">;</span>
239-
<span class="w"> </span><span class="p">}</span>
236+
<span class="w"> </span><span class="k">constexpr</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">push_back</span><span class="p">(</span><span class="n">T</span><span class="w"> </span><span class="k">const</span><span class="o">&amp;</span><span class="w"> </span><span class="n">v</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="p">{</span>
237+
<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="n">storage</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">size</span><span class="p">,</span><span class="w"> </span><span class="n">v</span><span class="p">);</span>
238+
<span class="w"> </span><span class="o">++</span><span class="n">size</span><span class="p">;</span>
239+
<span class="w"> </span><span class="p">}</span>
240240
<span class="p">};</span>
241241
</code></pre></div>
242242
</p>

rss.xml

Lines changed: 61 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,69 @@
22
<feed xmlns="http://www.w3.org/2005/Atom">
33
<title>cpprefjp - C++日本語リファレンス</title>
44
<link href="https://cpprefjp.github.io" />
5-
<updated>2026-04-06T09:05:20.050805</updated>
6-
<id>557a45f4-f7f4-4fdf-a643-41a71bcd6921</id>
5+
<updated>2026-04-06T09:13:46.290561</updated>
6+
<id>06005be6-4405-46bc-a080-76e093299817</id>
77

88

9+
<entry>
10+
<title>共用体の特殊メンバ関数のトリビアル化 [P3074R7] -- インデントを修正</title>
11+
<link href="https://cpprefjp.github.io/lang/cpp26/trivial_unions.html"/>
12+
<id>321f8d140117e4fa3530ed309c7233aaa4598df3:lang/cpp26/trivial_unions.md</id>
13+
<updated>2026-04-06T18:09:22+09:00</updated>
14+
15+
<summary type="html">&lt;pre&gt;&lt;code&gt;diff --git a/lang/cpp26/trivial_unions.md b/lang/cpp26/trivial_unions.md
16+
index bca9abfe9..418c69d5a 100644
17+
--- a/lang/cpp26/trivial_unions.md
18+
+++ b/lang/cpp26/trivial_unions.md
19+
@@ -15,25 +15,27 @@ C++26では、共用体 (`union`) のデフォルトコンストラクタとデ
20+
これにより、非トリビアルな型のメンバをもつ共用体を未初期化のストレージとして`constexpr`の文脈で使用できるようになる。
21+
22+
```cpp
23+
-template &amp;lt;typename T, size_t N&amp;gt;
24+
+template &amp;lt;typename T, std::size_t N&amp;gt;
25+
struct FixedVector {
26+
- union { T storage[N]; };
27+
- size_t size = 0;
28+
+ union { T storage[N]; };
29+
+ std::size_t size = 0;
30+
31+
- // C++23まで: unionのコンストラクタ/デストラクタが削除されるためコンパイルエラー
32+
- // C++26: OK。unionのコンストラクタ/デストラクタはトリビアル
33+
- constexpr FixedVector() = default;
34+
+ // C++23まで: unionのコンストラクタ/デストラクタが削除されるためコンパイルエラー
35+
+ // C++26: OK。unionのコンストラクタ/デストラクタはトリビアル
36+
+ constexpr FixedVector() = default;
37+
38+
- constexpr ~FixedVector() {
39+
- std::destroy(storage, storage + size);
40+
- }
41+
+ constexpr ~FixedVector() {
42+
+ std::destroy(storage, storage + size);
43+
+ }
44+
45+
- constexpr auto push_back(T const&amp;amp; v) -&amp;gt; void {
46+
- std::construct_at(storage + size, v);
47+
- ++size;
48+
- }
49+
+ constexpr auto push_back(T const&amp;amp; v) -&amp;gt; void {
50+
+ std::construct_at(storage + size, v);
51+
+ ++size;
52+
+ }
53+
};
54+
```
55+
+* std::construct_at[link /reference/memory/construct_at.md]
56+
+* std::destroy[link /reference/memory/destroy.md]
57+
58+
59+
## 仕様
60+
&lt;/code&gt;&lt;/pre&gt;</summary>
61+
62+
<author>
63+
<name>Akira Takahashi</name>
64+
<email>faithandbrave@gmail.com</email>
65+
</author>
66+
</entry>
67+
968
<entry>
1069
<title>コンパイラの実装状況 -- C++26: 「共用体の特殊メンバ関数のトリビアル化」を追加 (close #1417)</title>
1170
<link href="https://cpprefjp.github.io/implementation-status.html"/>
@@ -14004,29 +14063,6 @@ index 000000000..cbd2fe89e
1400414063
+
1400514064
+## 参照
1400614065
+- [P3533R2 constexpr virtual inheritance](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3533r2.html)
14007-
&lt;/code&gt;&lt;/pre&gt;</summary>
14008-
14009-
<author>
14010-
<name>Akira Takahashi</name>
14011-
<email>faithandbrave@gmail.com</email>
14012-
</author>
14013-
</entry>
14014-
14015-
<entry>
14016-
<title>main関数をグローバルモジュールに関連付けることを許可 [P3618R0] -- 関係ない参照文書を削除</title>
14017-
<link href="https://cpprefjp.github.io/lang/cpp26/allow_attaching_main_to_the_global_module.html"/>
14018-
<id>683ebcdeaef3c9e6e79b85bf0176929017739a97:lang/cpp26/allow_attaching_main_to_the_global_module.md</id>
14019-
<updated>2026-04-06T09:53:12+09:00</updated>
14020-
14021-
<summary type="html">&lt;pre&gt;&lt;code&gt;diff --git a/lang/cpp26/allow_attaching_main_to_the_global_module.md b/lang/cpp26/allow_attaching_main_to_the_global_module.md
14022-
index 72fc86986..8c1664e1d 100644
14023-
--- a/lang/cpp26/allow_attaching_main_to_the_global_module.md
14024-
+++ b/lang/cpp26/allow_attaching_main_to_the_global_module.md
14025-
@@ -80,4 +80,3 @@ P3422R1では、モジュール内で定義された`main()`関数を暗黙的
14026-
14027-
## 参照
14028-
- [P3618R0 Allow attaching main to the global module](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3618r0.html)
14029-
-- [P3422R1 Fixing Modules for Test](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3422r1.html)
1403014066
&lt;/code&gt;&lt;/pre&gt;</summary>
1403114067

1403214068
<author>

sitemap.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1970,7 +1970,7 @@
19701970

19711971
<url>
19721972
<loc>https://cpprefjp.github.io/lang/cpp26/trivial_unions.html</loc>
1973-
<lastmod>2026-04-06T18:01:01+09:00</lastmod>
1973+
<lastmod>2026-04-06T18:09:22+09:00</lastmod>
19741974
<changefreq>daily</changefreq>
19751975
<priority>0.7</priority>
19761976
</url>

0 commit comments

Comments
 (0)