• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

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

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

    関連項目

    参照