Skip to content

Latest commit

 

History

History
37 lines (25 loc) · 1.63 KB

try-catch_blocks_in_constexpr_functions.md

File metadata and controls

37 lines (25 loc) · 1.63 KB

constexpr関数内でのtry-catchブロックを許可 [P1002R1]

  • 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ブロックを使用して強い例外安全性の保証を提供している。

参照