- cpp20[meta cpp]
このページはC++20に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
C++20では、constexpr
関数内でのtry-catchブロックの使用を許可する。ただし、throw
式は従来通り許可せず、コンパイルエラーとなる (throw
式はconstexpr
関数におけるアサーションのような役割)。
constexpr int f(int x) {
// C++17まではconstexpr関数内でtry/catchブロックを使用するとコンパイルエラー
try {
return x + 1;
}
catch (...) {
return 0;
}
}
この機能が必要になったのは、リフレクションとメタプログラミングのためである。コンパイル時定数としてstd::vector
を使用できるようにするためには、try-catchブロックを許可することが必要であった。libc++でのvector::insert()
の実装において、try-catchブロックを使用して強い例外安全性の保証を提供している。