Skip to content

Latest commit

 

History

History
34 lines (23 loc) · 1.46 KB

permitting_static_constexpr_variables_in_constexpr_functions.md

File metadata and controls

34 lines (23 loc) · 1.46 KB

constexpr関数内でのstatic constexpr変数を許可 [P2647R1]

  • cpp23[meta cpp]

このページはC++23に採用された言語機能の変更を解説しています。

のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

概要

C++23からは、constexpr関数内で定数を定義するために、static constexpr変数を使用できるようになる。

char xdigit(int n) {
  static constexpr char digits[] = "0123456789abcdef"; // C++20:OK, C++23:OK
  return digits[n];
}

constexpr char xdigit(int n) {
  static constexpr char digits[] = "0123456789abcdef"; // C++20:NG, C++23:OK
  return digits[n];
}

C++20まではconstexpr内でstatic constexpr変数を定義できなかったため、関数外でのstatic constexpr変数の定義や、consteval関数で定数を返すなどの回避策がとられていたが、C++23からはそのような回避策が必要なくなる。

参照