最終更新日時: 2026年01月25日 13時25分34秒 (JST)
rotarymars が更新

履歴 編集

<contracts>

# contracts(C++26)

## 概要

`<contracts>`ヘッダでは、C++における契約プログラミングのサポートを提供する。

契約プログラミングは、関数やクラスの前提条件、事後条件、およびアサーションを明示的に指定するプログラミング手法である。これらの条件が満たされない場合、プログラムは契約違反を報告する。

このヘッダで提供される機能は、ユーザー定義の契約違反ハンドラ（`handle_contract_violation`関数）を記述するために使用することを主な目的としており、契約アサーション（`pre`、`post`、`contract_assert`）を記述するためにこのヘッダをインクルードする必要はない。

このヘッダのすべての宣言は名前空間`std::contracts`に属する。

## 列挙型

名前 | 説明 | 対応バージョン
--- | --- | ---
`assertion_kind` | 契約アサーションの種類（enum） | C++26
`evaluation_semantic` | 契約アサーションの評価セマンティクス（enum） | C++26
`detection_mode` | 契約違反の検出方法（enum） | C++26

## クラス

名前 | 説明 | 対応バージョン
--- | --- | ---
`contract_violation` | 契約違反に関する情報 (class) | C++26

## 関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`invoke_default_contract_violation_handler` | デフォルトの契約違反ハンドラを呼び出す（function） | C++26

## 機能テストマクロ

マクロ名 | 値 | 説明 | 対応バージョン
--- | --- | --- | ---
`__cpp_lib_contracts` | ??? | `<contracts>`ヘッダが利用可能かを検出する | C++26

言語機能（`pre`、`post`、`contract_assert`構文）の検出には`__cpp_contracts`マクロを使用する。ライブラリと言語機能は異なるベンダーから提供される可能性があるため、別々のマクロが用意されている。

## バージョン

### 言語

- C++26

### 処理系

- Clang: ??
- GCC: ??
- Visual C++: ??

## 関連項目

- 契約プログラミング

## 参照

- P2900R14 Contracts for C++