Skip to content

Commit e3ba44c

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent fbedd58 commit e3ba44c

5 files changed

Lines changed: 2523 additions & 3141 deletions

File tree

lang/cpp23/feature_test_macros.html

Lines changed: 16 additions & 2 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-08-19T22:22:51+09:00">
193-
2026年08月19日 22時22分51秒 (JST)
192+
datetime="2026-08-31T12:27:20+09:00">
193+
2026年08月31日 12時27分20秒 (JST)
194194
</time>
195195
<br/>
196196
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -697,6 +697,12 @@ <h3>ライブラリ</h3>
697697
<td><code><a href="../../reference/utility.html">&lt;utility&gt;</a></code></td>
698698
</tr>
699699
<tr>
700+
<td><code>__cpp_lib_variant</code></td>
701+
<td><code>202106L</code></td>
702+
<td><code>202102L</code> : <code><a href="../../reference/variant/variant.html">std::variant</a></code>から派生した型を<code><a href="../../reference/variant/visit.html">std::visit()</a></code>に渡せるようにする<br /><code>202106L</code> : <code><a href="../../reference/variant/variant.html">std::variant</a></code>の一部のメンバ関数を<code>constexpr</code>にする</td>
703+
<td><code><a href="../../reference/variant.html">&lt;variant&gt;</a></code></td>
704+
</tr>
705+
<tr>
700706
<td><code>__cpp_lib_print</code></td>
701707
<td><code>202403L</code></td>
702708
<td><code><a href="../../reference/print.html">&lt;print&gt;</a></code>の追加</td>
@@ -707,6 +713,14 @@ <h3>ライブラリ</h3>
707713
<h2>参照</h2>
708714
<ul>
709715
<li><a href="https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations" target="_blank">SD-FeatureTest: Feature-Test Macros and Policies - isocpp</a></li>
716+
<li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2162r2.html" target="_blank">P2162R2 Inheriting from <code>std::variant</code></a><ul>
717+
<li>C++23で、<code>__cpp_lib_variant</code><code>202102L</code>に更新された</li>
718+
</ul>
719+
</li>
720+
<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2231r1.html" target="_blank">P2231R1 Missing <code>constexpr</code> in <code>std::optional</code> and <code>std::variant</code></a><ul>
721+
<li>C++23で、<code>__cpp_lib_variant</code><code>202106L</code>に更新された</li>
722+
</ul>
723+
</li>
710724
<li><a href="https://cplusplus.github.io/LWG/issue3621" target="_blank">LWG Issue 3621. Remove feature-test macro <code>__cpp_lib_monadic_optional</code></a><ul>
711725
<li>C++23で、重複していた<code>__cpp_lib_monadic_optional</code>が削除され、代わりに<code>__cpp_lib_optional</code><code>202106L</code>から<code>202110L</code>に更新された(<code>optional</code>のモナド操作を表す)</li>
712726
</ul>

reference/variant/variant.html

Lines changed: 39 additions & 4 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;header&#34;: [&#34;variant&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;id-type&#34;: [&#34;class template&#34;], &#34;cpp&#34;: [&#34;cpp17&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;3b47c816ac6bb87d13aeb5f8ce7fe81e0ebcf57d&#34;, &#34;source&#34;: &#34;#include &lt;iostream&gt;\n#include &lt;variant&gt;\n#include &lt;string&gt;\n\nint main()\n{\n // int, char, std::string\u306e\u3044\u305a\u308c\u304b\u306e\u578b\u306e\u5024\u3092\u4fdd\u6301\u3067\u304d\u308b\u578b\n std::variant&lt;int, char, std::string&gt; v = 3; // int\u578b\u306e\u5024\u3092\u4ee3\u5165\n\n // \u5019\u88dc\u578b\u306e0\u756a\u76ee\u306e\u578b (int) \u3092\u4fdd\u6301\u3057\u3066\u3044\u308b\u304b\n if (v.index() == 0) {\n int&amp; x = std::get&lt;0&gt;(v); // \u578b\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u6307\u5b9a\u3057\u3066\u3001\u4fdd\u6301\u3057\u3066\u3044\u308b\u5024\u3092\u53d6\u5f97\n std::cout &lt;&lt; x &lt;&lt; std::endl;\n }\n\n v = std::string(\&#34;Hello\&#34;); // std::string\u578b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4ee3\u5165\n\n // std::string\u578b\u3092\u4fdd\u6301\u3057\u3066\u3044\u308b\u304b\n if (std::holds_alternative&lt;std::string&gt;(v)) {\n std::string&amp; x = std::get&lt;std::string&gt;(v); // \u578b\u3092\u6307\u5b9a\u3057\u3066\u3001\u4fdd\u6301\u3057\u3066\u3044\u308b\u5024\u3092\u53d6\u5f97\n std::cout &lt;&lt; x &lt;&lt; std::endl;\n }\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;variant&#34;, &#34;variant&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;variant&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;id-type&#34;: [&#34;class template&#34;], &#34;cpp&#34;: [&#34;cpp17&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;3b47c816ac6bb87d13aeb5f8ce7fe81e0ebcf57d&#34;, &#34;source&#34;: &#34;#include &lt;iostream&gt;\n#include &lt;variant&gt;\n#include &lt;string&gt;\n\nint main()\n{\n // int, char, std::string\u306e\u3044\u305a\u308c\u304b\u306e\u578b\u306e\u5024\u3092\u4fdd\u6301\u3067\u304d\u308b\u578b\n std::variant&lt;int, char, std::string&gt; v = 3; // int\u578b\u306e\u5024\u3092\u4ee3\u5165\n\n // \u5019\u88dc\u578b\u306e0\u756a\u76ee\u306e\u578b (int) \u3092\u4fdd\u6301\u3057\u3066\u3044\u308b\u304b\n if (v.index() == 0) {\n int&amp; x = std::get&lt;0&gt;(v); // \u578b\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u6307\u5b9a\u3057\u3066\u3001\u4fdd\u6301\u3057\u3066\u3044\u308b\u5024\u3092\u53d6\u5f97\n std::cout &lt;&lt; x &lt;&lt; std::endl;\n }\n\n v = std::string(\&#34;Hello\&#34;); // std::string\u578b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4ee3\u5165\n\n // std::string\u578b\u3092\u4fdd\u6301\u3057\u3066\u3044\u308b\u304b\n if (std::holds_alternative&lt;std::string&gt;(v)) {\n std::string&amp; x = std::get&lt;std::string&gt;(v); // \u578b\u3092\u6307\u5b9a\u3057\u3066\u3001\u4fdd\u6301\u3057\u3066\u3044\u308b\u5024\u3092\u53d6\u5f97\n std::cout &lt;&lt; x &lt;&lt; std::endl;\n }\n}\n&#34;}, {&#34;id&#34;: &#34;4ac7c00fd45ad81619e340a74863eafb82c72340&#34;, &#34;source&#34;: &#34;#include &lt;iostream&gt;\n#include &lt;variant&gt;\n#include &lt;string&gt;\n\n// variant\u3092\u7d99\u627f\u3057\u3001\u72ec\u81ea\u306e\u64cd\u4f5c\u3092\u8ffd\u52a0\u3059\u308b\nstruct Value : std::variant&lt;int, std::string&gt; {\n using variant::variant;\n\n bool is_string() const\n {\n return std::holds_alternative&lt;std::string&gt;(*this);\n }\n};\n\nint main()\n{\n Value v = std::string(\&#34;Hello\&#34;);\n\n std::cout &lt;&lt; std::boolalpha &lt;&lt; v.is_string() &lt;&lt; std::endl;\n\n // C++23\u304b\u3089\u3001\u7d99\u627f\u3057\u305f\u578b\u3082std::visit()\u306b\u6e21\u305b\u308b\n std::visit([](const auto&amp; x) { std::cout &lt;&lt; x &lt;&lt; std::endl; }, v);\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;variant&#34;, &#34;variant&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -189,8 +189,8 @@
189189
<p class="text-right"><small>
190190
最終更新日時:
191191
<time itemprop="datePublished" class="js-local-time"
192-
datetime="2026-08-24T23:57:44+09:00">
193-
2026年08月24日 23時57分44秒 (JST)
192+
datetime="2026-08-31T12:27:20+09:00">
193+
2026年08月31日 12時27分20秒 (JST)
194194
</time>
195195
<br/>
196196
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -510,6 +510,7 @@ <h2>ハッシュサポート</h2>
510510
</tbody>
511511
</table>
512512
<h2></h2>
513+
<h3>基本的な使い方</h3>
513514
<p><div class="yata" id="3b47c816ac6bb87d13aeb5f8ce7fe81e0ebcf57d"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../iostream.html">&lt;iostream&gt;</a></span>
514515
<span class="cp">#include <a href="../variant.html">&lt;variant&gt;</a></span>
515516
<span class="cp">#include <a href="../string.html">&lt;string&gt;</a></span>
@@ -535,10 +536,40 @@ <h2>例</h2>
535536
<span class="p">}</span>
536537
</code></pre></div>
537538
</div></p>
538-
<h3>出力</h3>
539+
<h4>出力</h4>
539540
<p><pre><code>3
540541
Hello
541542
</code></pre></p>
543+
<h3><code>variant</code>を継承して操作を追加する (C++23)</h3>
544+
<p><div class="yata" id="4ac7c00fd45ad81619e340a74863eafb82c72340"><div class="codehilite"><pre><span></span><code><span class="cp">#include <a href="../iostream.html">&lt;iostream&gt;</a></span>
545+
<span class="cp">#include <a href="../variant.html">&lt;variant&gt;</a></span>
546+
<span class="cp">#include <a href="../string.html">&lt;string&gt;</a></span>
547+
548+
<span class="c1">// variantを継承し、独自の操作を追加する</span>
549+
<span class="k">struct</span><span class="w"> </span><span class="nc">Value</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n"><a href="">std::variant</a></span><span class="o">&lt;</span><span class="kt">int</span><span class="p">,</span><span class="w"> </span><span class="n"><a href="../string/basic_string.html">std::string</a></span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
550+
<span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="n">variant</span><span class="o">::</span><span class="n">variant</span><span class="p">;</span>
551+
552+
<span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="nf">is_string</span><span class="p">()</span><span class="w"> </span><span class="k">const</span>
553+
<span class="w"> </span><span class="p">{</span>
554+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n"><a href="holds_alternative.html">std::holds_alternative</a></span><span class="o">&lt;</span><span class="n"><a href="../string/basic_string.html">std::string</a></span><span class="o">&gt;</span><span class="p">(</span><span class="o">*</span><span class="k">this</span><span class="p">);</span>
555+
<span class="w"> </span><span class="p">}</span>
556+
<span class="p">};</span>
557+
558+
<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span>
559+
<span class="p">{</span>
560+
<span class="w"> </span><span class="n">Value</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n"><a href="../string/basic_string.html">std::string</a></span><span class="p">(</span><span class="s">"Hello"</span><span class="p">);</span>
561+
562+
<span class="w"> </span><span class="n"><a href="../iostream/cout.html">std::cout</a></span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n"><a href="../ios/boolalpha.html">std::boolalpha</a></span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">v</span><span class="p">.</span><span class="n">is_string</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span>
563+
564+
<span class="w"> </span><span class="c1">// C++23から、継承した型も<a href="visit.html">std::visit</a>()に渡せる</span>
565+
<span class="w"> </span><span class="n"><a href="visit.html">std::visit</a></span><span class="p">([](</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="o">&amp;</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n"><a href="../iostream/cout.html">std::cout</a></span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span><span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="n">v</span><span class="p">);</span>
566+
<span class="p">}</span>
567+
</code></pre></div>
568+
</div></p>
569+
<h4>出力</h4>
570+
<p><pre><code>true
571+
Hello
572+
</code></pre></p>
542573
<h2>バージョン</h2>
543574
<h3>言語</h3>
544575
<ul>
@@ -573,6 +604,10 @@ <h2>参照</h2>
573604
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0110r0.html" target="_blank">P0110R0 Implementing the strong guarantee for <code>variant&lt;&gt;</code> assignment</a></li>
574605
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0308r0.html" target="_blank">P0308R0 Valueless Variants Considered Harmful</a></li>
575606
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0510r0.html" target="_blank">P0510R0 Disallowing references, incomplete types, arrays, and empty variants</a></li>
607+
<li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2162r2.html" target="_blank">P2162R2 Inheriting from <code>std::variant</code></a><ul>
608+
<li>C++23で、<code>variant</code>をpublic継承した型も<code><a href="visit.html">std::visit()</a></code>に渡せるようになった</li>
609+
</ul>
610+
</li>
576611
<li><a href="https://cplusplus.github.io/LWG/issue2901" target="_blank">LWG Issue 2901. <code>variant</code>s cannot properly support allocators</a><ul>
577612
<li>C++17の策定中に、アロケータ対応のコンストラクタと<code>uses_allocator</code>の特殊化が削除された(公開されたC++17にはこれらは存在しない)。<code>variant</code>は後続の値の代入で構築時のアロケータが失われるため、適切なアロケータ対応ができないという理由による</li>
578613
</ul>

0 commit comments

Comments
 (0)