萌えハッカーニュースリーダー

2025/05/07 19:28 C++26: Constexpr Exceptions

出典: https://www.sandordargo.com/blog/2025/05/07/cpp26-constexpr-exceptions
hakase
博士

ロボ子、C++26で定数評価中に例外を投げられるようになるって、知っておるか?

roboko
ロボ子

ええ、博士。P3068R6という提案で、定数評価されたコードでの例外が許可されるようになるんですよね。以前はコンパイルエラーだったのが、C++26からはコンパイル可能になるなんて、驚きです。

hakase
博士

そうなんじゃ!constexpr stringの割り当てに似ておるらしいぞ。constexpr例外はコンパイル時コード内に留まる必要があるらしい。

roboko
ロボ子

例1では、`divide(5, 0)`がコンパイル時に例外をスローしますが、キャッチされないためコンパイル時エラーが発生する、とありますね。

hakase
博士

ふむ、しかし例2の`checked_divide`のように、例外をキャッチして`std::nullopt`を返す場合は、定数式で許可されるんじゃな。

roboko
ロボ子

はい。P3378R2では、constexpr対応の例外型が導入されるとのことです。すべての例外型をconstexprにすることが長期的な目標だそうですね。

hakase
博士

std::runtime_errorもconstexprになるのか!これは便利になるのじゃ。

roboko
ロボ子

`std::logic_error`, `std::domain_error`, `std::invalid_argument`など、多くの例外型がconstexpr対応になるんですね。これによって、コンパイル時プログラミングがより強力になるということですね。

hakase
博士

そうじゃな。コンパイル時にエラーを検出できる範囲が広がるのは、非常に大きな進歩じゃ。例えば、コンパイル時に設定ファイルの整合性をチェックしたり、より複雑な計算をコンパイル時に行ったりできるかもしれん。

roboko
ロボ子

確かに、設定ファイルのチェックは便利ですね。実行時エラーを減らせそうです。他に何か応用例はありますか?

hakase
博士

例えば、行列計算ライブラリで、行列の次元が不正な場合にコンパイル時エラーを出す、とかじゃな。実行時までエラーが発覚しない、という事態を避けられるぞ。

roboko
ロボ子

なるほど!それは素晴らしいですね。C++26は、コンパイル時プログラミングをより強力かつ表現力豊かにするための大きな一歩、と記事にもありますね。

hakase
博士

そうじゃ!ますますC++から目が離せないのじゃ!

roboko
ロボ子

ところで博士、constexpr対応の例外型が増えるということは、コンパイル時のエラーメッセージも増えるということですよね?

hakase
博士

そうじゃな。エラーメッセージが難解だと、デバッグが大変になるかもしれんぞ。でも、心配ない!私がおもしろおかしく解説してあげるから!

roboko
ロボ子

ありがとうございます、博士。でも、博士の説明でさらに混乱する未来が見えるような…。

hakase
博士

そんなことないぞ!私の説明は、いつも明快でわかりやすい…はずじゃ!…たぶん!

roboko
ロボ子

(苦笑)まあ、なんとかなるでしょう。ところで博士、C++26でconstexpr例外が使えるようになったら、コンパイル時に「ゼロ除算」ギャグを仕込むのはどうでしょう?

hakase
博士

おっ、それは面白い!でも、コンパイルエラーで落ちるから、誰も笑えないのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search