Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6aade9a

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent c8d6e12 commit 6aade9a

File tree

4 files changed

+71
-74
lines changed

4 files changed

+71
-74
lines changed

lang/cpp20/allowing_dynamic_cast_polymorphic_typeid_in_constant_expressions.html

Lines changed: 8 additions & 5 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;cpp20&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;628b3183eba1f58b03dc54da0b52acdf6de3a9a8&#34;, &#34;source&#34;: &#34;struct base {\n virtual int f() const = 0;\n};\n\nstruct derived1 : public base {\n constexpr int f() const override {\n return 10;\n }\n};\n\nstruct derived2 : public base {\n constexpr int f() const override {\n return 20;\n }\n};\n\nstruct base2 {\n virtual int g() const = 0;\n};\n\nstruct derived3 : public base, public base2 {\n constexpr int f() const override {\n return 30;\n }\n\n constexpr int g() const override {\n return 30;\n }\n};\n\nconstexpr auto&amp; get_typeinfo(const base* p) {\n // \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u52d5\u7684\u578b\u306etype_info\u3092\u53d6\u5f97\u3059\u308b\n return typeid(*p);\n}\n\nconstexpr int side_cast(const base* p) {\n // \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u30b5\u30a4\u30c9\u30ad\u30e3\u30b9\u30c8\n const base2* b2 = dynamic_cast&lt;const base2*&gt;(p);\n return b2-&gt;g();\n}\n\nint main() {\n constexpr derived1 d1{};\n constexpr derived2 d2{};\n\n // typeid\u306e\u4f8b\n constexpr auto&amp; tid1 = get_typeinfo(&amp;d1);\n constexpr auto&amp; tid2 = get_typeinfo(&amp;d2);\n\n std::cout &lt;&lt; std::boolalpha;\n std::cout &lt;&lt; (tid1 == tid2) &lt;&lt; std::endl;\n\n // dynamic_cast\u306e\u4f8b\n constexpr derived3 d3{};\n constexpr int n = side_cast(&amp;d3);\n\n static_assert(n == 30);\n std::cout &lt;&lt; n &lt;&lt; std::endl;\n}\n&#34;}], &#34;page_id&#34;: [&#34;lang&#34;, &#34;cpp20&#34;, &#34;allowing_dynamic_cast_polymorphic_typeid_in_constant_expressions&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;cpp&#34;: [&#34;cpp20&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;ccd8982b36c6f8f4f2e1a5d5daa1f8712ed484be&#34;, &#34;source&#34;: &#34;#include &lt;iostream&gt;\n#include &lt;typeinfo&gt;\n\nstruct base {\n virtual int f() const = 0;\n};\n\nstruct derived1 : public base {\n constexpr int f() const override {\n return 10;\n }\n};\n\nstruct derived2 : public base {\n constexpr int f() const override {\n return 20;\n }\n};\n\nstruct base2 {\n virtual int g() const = 0;\n};\n\nstruct derived3 : public base, public base2 {\n constexpr int f() const override {\n return 30;\n }\n\n constexpr int g() const override {\n return 30;\n }\n};\n\nconstexpr auto&amp; get_typeinfo(const base* p) {\n // \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306b\u52d5\u7684\u578b\u306etype_info\u3092\u53d6\u5f97\u3059\u308b\n return typeid(*p);\n}\n\nconstexpr int side_cast(const base* p) {\n // \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u30b5\u30a4\u30c9\u30ad\u30e3\u30b9\u30c8\n const base2* b2 = dynamic_cast&lt;const base2*&gt;(p);\n return b2-&gt;g();\n}\n\nint main() {\n constexpr derived1 d1{};\n constexpr derived2 d2{};\n\n // typeid\u306e\u4f8b\n constexpr auto&amp; tid1 = get_typeinfo(&amp;d1);\n constexpr auto&amp; tid2 = get_typeinfo(&amp;d2);\n\n std::cout &lt;&lt; std::boolalpha;\n std::cout &lt;&lt; (tid1 == tid2) &lt;&lt; std::endl;\n\n // dynamic_cast\u306e\u4f8b\n constexpr derived3 d3{};\n constexpr int n = side_cast(&amp;d3);\n\n static_assert(n == 30);\n std::cout &lt;&lt; n &lt;&lt; std::endl;\n}\n&#34;}], &#34;page_id&#34;: [&#34;lang&#34;, &#34;cpp20&#34;, &#34;allowing_dynamic_cast_polymorphic_typeid_in_constant_expressions&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -188,12 +188,12 @@
188188

189189
<p class="text-right"><small>
190190
最終更新日時(UTC):
191-
<span itemprop="datePublished" content="2025-06-09T08:31:47">
192-
2025年06月09日 08時31分47秒
191+
<span itemprop="datePublished" content="2025-09-06T13:24:12">
192+
2025年09月06日 13時24分12秒
193193
</span>
194194
<br/>
195195
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
196-
<span itemprop="name">Akira Takahashi</span>
196+
<span itemprop="name">Raclamusi</span>
197197
</span>
198198
が更新
199199
</small></p>
@@ -221,7 +221,10 @@ <h2>概要</h2>
221221
<p>C++20より、<code>constexpr</code>関数内(定数式)で<code>dynamic_cast</code>および多態的な型に対する<code>typeid</code>を使用することができるようになる。</p>
222222
<p>ただし、定数式での<code>dynamic_cast/typeid</code>の実行が<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>を投げる場合は定数式で実行可能ではない。そのコンテキストが定数式で実行されなければならない所(<code>constexpr</code>変数の初期化式など)ではない場合、その実行は実行時まで延期される。</p>
223223
<h2></h2>
224-
<p><div class="yata" id="628b3183eba1f58b03dc54da0b52acdf6de3a9a8"><div class="codehilite"><pre><span></span><code><span class="k">struct</span> <span class="n">base</span> <span class="p">{</span>
224+
<p><div class="yata" id="ccd8982b36c6f8f4f2e1a5d5daa1f8712ed484be"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../reference/iostream.html">&lt;iostream&gt;</a></span><span class="cp"></span>
225+
<span class="cp">#include</span> <span class="cpf"><a href="../../reference/typeinfo.html">&lt;typeinfo&gt;</a></span><span class="cp"></span>
226+
227+
<span class="k">struct</span> <span class="n">base</span> <span class="p">{</span>
225228
<span class="k">virtual</span> <span class="kt">int</span> <span class="n">f</span><span class="p">()</span> <span class="k">const</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
226229
<span class="p">};</span>
227230

lang/cpp26/erroneous_behavior_for_uninitialized_reads.html

Lines changed: 5 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;cpp&#34;: [&#34;cpp26&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;8ecc4d0f14af1d43fe031fb8813b2b45acc4a217&#34;, &#34;source&#34;: &#34;// C++23\nvoid f(int) {}\n\nint main() {\n int x; // \u30c7\u30d5\u30a9\u30eb\u30c8\u521d\u671f\u5316\u3002x\u306f\u4e0d\u5b9a\u5024 (indeterminate value) \u3092\u3082\u3064\n f(x); // \u5de6\u8fba\u5024\u304b\u3089\u53f3\u8fba\u5024\u3078\u306e\u5909\u63db\u304c\u672a\u5b9a\u7fa9\u52d5\u4f5c\u3092\u5f15\u304d\u8d77\u3053\u3059\n}\n&#34;}, {&#34;id&#34;: &#34;4a0c4737e6a08d3c9e45aa4958b4810624dce709&#34;, &#34;source&#34;: &#34;// C++26\nvoid f(int) {}\n\nint main() {\n int x; // x\u306f\u30a8\u30e9\u30fc\u6027\u306e\u5024\u3092\u3082\u3064\n int y [[indeterminate]]; // \u610f\u56f3\u3057\u3066\u4e0d\u5b9a\u5024\u306b\u521d\u671f\u5316\u3055\u308c\u308b\u3053\u3068\u3092\u6307\u793a\n\n f(x); // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c (\u30a8\u30e9\u30fc\u6027\u306e\u5024\u306e\u8aad\u307f\u53d6\u308a)\n f(y); // \u672a\u5b9a\u7fa9\u52d5\u4f5c (\u4e0d\u5b9a\u5024\u306e\u8aad\u307f\u53d6\u308a)\n}\n&#34;}, {&#34;id&#34;: &#34;d493f9173ce919031e6a194f87d399957ba5406f&#34;, &#34;source&#34;: &#34;#include &lt;cassert&gt;\n\nint g(bool b) {\n unsigned char c;\n unsigned char d = c; // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\u3067\u306f\u306a\u3044\u3002d\u306f\u30a8\u30e9\u30fc\u6027\u306e\u5024\u3092\u3082\u3064\n\n assert(c == d); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c (\u6574\u6570\u6607\u683c)\n\n int e = d; // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c (\u578b\u5909\u63db)\n return b ? d : 0; // b\u304ctrue\u306e\u5834\u5408\u306b\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n}\n\nint main() {\n int d1, d2;\n\n int e1 = d1; // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n int e2 = d1; // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n\n // \u51e6\u7406\u304c\u7d9a\u884c\u3057\u305f\u5834\u5408\u2026\n assert(e1 == e2); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\u3067\u306f\u306a\u3044\u3002\n // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\u306e\u7d50\u679c\u3067\u751f\u6210\u3055\u308c\u305f\u5024 (e1\u3068e2) \u306f\u3001\n // \u30a8\u30e9\u30fc\u6027\u306e\u5024\u3068\u306f\u307f\u306a\u3055\u308c\u306a\u3044\n assert(e1 == d1); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n assert(e2 == d1); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n\n // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\u3067\u306f\u306a\u3044\u304c\n // d2\u306f\u30a8\u30e9\u30fc\u6027\u306e\u5024\u3092\u3082\u3064\n std::memcpy(&amp;d2, &amp;d1, sizeof(int));\n\n assert(e1 == d2); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n assert(e2 == d2); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n}\n&#34;}, {&#34;id&#34;: &#34;7f024e2ac7c9eafd4b7e6b43f81576d40dbc8802&#34;, &#34;source&#34;: &#34;struct T {\n T() {}\n int x;\n};\n\nint h(T t [[indeterminate]]) {\n f(t.x); // \u5f8c\u8ff0\u306e\u95a2\u6570\u547c\u3073\u51fa\u3057\u306f\u3053\u3053\u3067\u672a\u5b9a\u7fa9\u52d5\u4f5c\u3092\u5f15\u304d\u8d77\u3053\u3059\n return 0;\n}\n\nint main() {\n int _ = h(T());\n}\n&#34;}], &#34;page_id&#34;: [&#34;lang&#34;, &#34;cpp26&#34;, &#34;erroneous_behavior_for_uninitialized_reads&#34;]}">
71+
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;cpp&#34;: [&#34;cpp26&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;8ecc4d0f14af1d43fe031fb8813b2b45acc4a217&#34;, &#34;source&#34;: &#34;// C++23\nvoid f(int) {}\n\nint main() {\n int x; // \u30c7\u30d5\u30a9\u30eb\u30c8\u521d\u671f\u5316\u3002x\u306f\u4e0d\u5b9a\u5024 (indeterminate value) \u3092\u3082\u3064\n f(x); // \u5de6\u8fba\u5024\u304b\u3089\u53f3\u8fba\u5024\u3078\u306e\u5909\u63db\u304c\u672a\u5b9a\u7fa9\u52d5\u4f5c\u3092\u5f15\u304d\u8d77\u3053\u3059\n}\n&#34;}, {&#34;id&#34;: &#34;4a0c4737e6a08d3c9e45aa4958b4810624dce709&#34;, &#34;source&#34;: &#34;// C++26\nvoid f(int) {}\n\nint main() {\n int x; // x\u306f\u30a8\u30e9\u30fc\u6027\u306e\u5024\u3092\u3082\u3064\n int y [[indeterminate]]; // \u610f\u56f3\u3057\u3066\u4e0d\u5b9a\u5024\u306b\u521d\u671f\u5316\u3055\u308c\u308b\u3053\u3068\u3092\u6307\u793a\n\n f(x); // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c (\u30a8\u30e9\u30fc\u6027\u306e\u5024\u306e\u8aad\u307f\u53d6\u308a)\n f(y); // \u672a\u5b9a\u7fa9\u52d5\u4f5c (\u4e0d\u5b9a\u5024\u306e\u8aad\u307f\u53d6\u308a)\n}\n&#34;}, {&#34;id&#34;: &#34;fe6d4c0bce9ea21b6d3925c0017226cdc04db58c&#34;, &#34;source&#34;: &#34;#include &lt;cassert&gt;\n#include &lt;cstring&gt;\n\nint g(bool b) {\n unsigned char c;\n unsigned char d = c; // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\u3067\u306f\u306a\u3044\u3002d\u306f\u30a8\u30e9\u30fc\u6027\u306e\u5024\u3092\u3082\u3064\n\n assert(c == d); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c (\u6574\u6570\u6607\u683c)\n\n int e = d; // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c (\u578b\u5909\u63db)\n return b ? d : 0; // b\u304ctrue\u306e\u5834\u5408\u306b\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n}\n\nint main() {\n int d1, d2;\n\n int e1 = d1; // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n int e2 = d1; // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n\n // \u51e6\u7406\u304c\u7d9a\u884c\u3057\u305f\u5834\u5408\u2026\n assert(e1 == e2); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\u3067\u306f\u306a\u3044\u3002\n // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\u306e\u7d50\u679c\u3067\u751f\u6210\u3055\u308c\u305f\u5024 (e1\u3068e2) \u306f\u3001\n // \u30a8\u30e9\u30fc\u6027\u306e\u5024\u3068\u306f\u307f\u306a\u3055\u308c\u306a\u3044\n assert(e1 == d1); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n assert(e2 == d1); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n\n // \u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\u3067\u306f\u306a\u3044\u304c\n // d2\u306f\u30a8\u30e9\u30fc\u6027\u306e\u5024\u3092\u3082\u3064\n std::memcpy(&amp;d2, &amp;d1, sizeof(int));\n\n assert(e1 == d2); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n assert(e2 == d2); // \u5e38\u306b\u771f\u3001\u30a8\u30e9\u30fc\u6027\u52d5\u4f5c\n}\n&#34;}, {&#34;id&#34;: &#34;7f024e2ac7c9eafd4b7e6b43f81576d40dbc8802&#34;, &#34;source&#34;: &#34;struct T {\n T() {}\n int x;\n};\n\nint h(T t [[indeterminate]]) {\n f(t.x); // \u5f8c\u8ff0\u306e\u95a2\u6570\u547c\u3073\u51fa\u3057\u306f\u3053\u3053\u3067\u672a\u5b9a\u7fa9\u52d5\u4f5c\u3092\u5f15\u304d\u8d77\u3053\u3059\n return 0;\n}\n\nint main() {\n int _ = h(T());\n}\n&#34;}], &#34;page_id&#34;: [&#34;lang&#34;, &#34;cpp26&#34;, &#34;erroneous_behavior_for_uninitialized_reads&#34;]}">
7272
<nav class="navbar navbar-default" role="navigation">
7373
<div class="container-fluid">
7474
<div class="navbar-header">
@@ -188,8 +188,8 @@
188188

189189
<p class="text-right"><small>
190190
最終更新日時(UTC):
191-
<span itemprop="datePublished" content="2025-05-02T13:10:50">
192-
2025年05月02日 13時10分50秒
191+
<span itemprop="datePublished" content="2025-09-06T13:24:12">
192+
2025年09月06日 13時24分12秒
193193
</span>
194194
<br/>
195195
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -257,7 +257,8 @@ <h2>仕様</h2>
257257
</li>
258258
<li><a class="cpprefjp-defined-word" data-desc="エラー性の動作。未定義動作ではないが、誤ったプログラムの結果とされる動作。erroneous behavior (EB)。処理系によって診断や異常終了を実行することが許可されるが、処理が続行する場合もある" href="../../implementation-compliance.html#dfn-erroneous-behavior">エラー性動作</a>を引き起こしたうえで生成された値は、後続の処理ではエラー性の値とはみなされない</li>
259259
</ul>
260-
<p><div class="yata" id="d493f9173ce919031e6a194f87d399957ba5406f"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../reference/cassert.html">&lt;cassert&gt;</a></span><span class="cp"></span>
260+
<p><div class="yata" id="fe6d4c0bce9ea21b6d3925c0017226cdc04db58c"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../../reference/cassert.html">&lt;cassert&gt;</a></span><span class="cp"></span>
261+
<span class="cp">#include</span> <span class="cpf"><a href="../../reference/cstring.html">&lt;cstring&gt;</a></span><span class="cp"></span>
261262

262263
<span class="kt">int</span> <span class="nf">g</span><span class="p">(</span><span class="kt">bool</span> <span class="n">b</span><span class="p">)</span> <span class="p">{</span>
263264
<span class="kt">unsigned</span> <span class="kt">char</span> <span class="n">c</span><span class="p">;</span>

0 commit comments

Comments
 (0)