最終更新日時(UTC):
が更新

履歴 編集

constexpr関数内でのtry-catchブロックを許可(C++20)

概要

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

関連項目

  • C++20 可変サイズをもつコンテナのconstexpr

参照