|
189 | 189 | <p class="text-right"><small> |
190 | 190 | 最終更新日時: |
191 | 191 | <time itemprop="datePublished" class="js-local-time" |
192 | | - datetime="2026-07-22T16:08:23+09:00"> |
193 | | - 2026年07月22日 16時08分23秒 (JST) |
| 192 | + datetime="2026-08-28T12:11:39+09:00"> |
| 193 | + 2026年08月28日 12時11分39秒 (JST) |
194 | 194 | </time> |
195 | 195 | <br/> |
196 | 196 | <span itemprop="author" itemscope itemtype="http://schema.org/Person"> |
197 | | - <span itemprop="name">rotarymars</span> |
| 197 | + <span itemprop="name">Akira Takahashi</span> |
198 | 198 | </span> |
199 | 199 | が更新 |
200 | 200 | </small></p> |
@@ -571,6 +571,16 @@ <h4>ハンドラの定義</h4> |
571 | 571 | </code></pre></div> |
572 | 572 | </p> |
573 | 573 | <p>この関数を定義することで、デフォルトの契約違反ハンドラをオーバーライドできる。</p> |
| 574 | +<p>ただし、契約違反ハンドラを置き換えられるかどうかは<a class="cpprefjp-defined-word" data-desc="処理系定義の動作。処理系によって事前に定めた動作をする" href="../../implementation-compliance.html#dfn-implementation-defined-behavior">処理系定義</a>である。置き換えられない処理系でこの関数を宣言した場合、そのプログラムは<a class="cpprefjp-defined-word" data-desc="プログラムが適格でないこと。コンパイルエラーなどになる" href="../../implementation-compliance.html#dfn-ill-formed">不適格</a>となる(<a class="cpprefjp-defined-word" data-desc="処理系は規則違反に対してエラーメッセージや警告を出さないかもしれない" href="../../implementation-compliance.html#dfn-no-diagnostic-required">診断不要</a>)。置き換えられるかどうかは、<code><a href="../../reference/contracts.html"><contracts></a></code>ヘッダで定義される機能テストマクロ<code><a href="../../reference/contracts/cpp_lib_replaceable_contract_violation_handler.html">__cpp_lib_replaceable_contract_violation_handler</a></code>によって判定できる。このマクロは、置き換えられる場合に<code>202603L</code>、置き換えられない場合に<code>0</code>となる。</p> |
| 575 | +<p><div class="codehilite"><pre><span></span><code><span class="cp">#include</span><span class="w"> </span><span class="cpf"><contracts></span> |
| 576 | + |
| 577 | +<span class="cp">#if __cpp_lib_replaceable_contract_violation_handler</span> |
| 578 | +<span class="kt">void</span><span class="w"> </span><span class="nf">handle_contract_violation</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">contracts</span><span class="o">::</span><span class="n">contract_violation</span><span class="o">&</span><span class="w"> </span><span class="n">violation</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> |
| 579 | +<span class="w"> </span><span class="c1">// ...</span> |
| 580 | +<span class="p">}</span> |
| 581 | +<span class="cp">#endif</span> |
| 582 | +</code></pre></div> |
| 583 | +</p> |
574 | 584 | <h4>contract_violation情報</h4> |
575 | 585 | <p><code>std::contracts::contract_violation</code>オブジェクトは、契約違反に関する以下の情報を提供する:</p> |
576 | 586 | <ul> |
@@ -880,6 +890,10 @@ <h2><a href="#relative-page" id="relative-page">関連項目</a></h2> |
880 | 890 | <h2>参照</h2> |
881 | 891 | <ul> |
882 | 892 | <li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p2900r14.pdf" target="_blank">P2900R14 <code>Contracts for C++</code></a></li> |
| 893 | +<li><a href="https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3886r0.pdf" target="_blank">P3886R0 Wording for AT1-057</a><ul> |
| 894 | +<li>C++26で、契約違反ハンドラを置き換えられるかを検出する機能テストマクロ<code>__cpp_lib_replaceable_contract_violation_handler</code>が追加された</li> |
| 895 | +</ul> |
| 896 | +</li> |
883 | 897 | </ul></div> |
884 | 898 |
|
885 | 899 | </div> |
|
0 commit comments