概要 C++20では、いわゆる契約プログラミングがサポートされる予定であったが、C++23以降へ延期された。 以下の内容はC++20で予定されていた仕様に基づいており、今後変わる可能性が高い。 例 #include <iostream> #include <cmath> double sqrt_checked(double x) [[expects: x > 0]] // 引数に対する事前条件 [[ensures r: r > 0]] // 戻り値に対する事後条件 { return std::sqrt(x); } int main() { double x; std::cin >> x; [[assert: x > 0]]; // アサーション double y = sqrt_checked(x); std::cout << y << '\n'; } 仕様 契約属性 契約は属性として記述す