ボレロ村上 - ENiyGmaA Code

中3女子です。

constexpr ライブラリ

constexpr を主眼としたライブラリは未だそう多くないと思います。


C++標準ライブラリでは、numeric_limits や chrono など自明ないくつかの機能が constexpr 化されています。
また、libstdc++ など標準ライブラリベンダの独自拡張として constexpr 化されている場合もあります。


個人が制作・公開しているライブラリとして、 id:RiSK さんによる CEL - ConstExpr Library などがあります。
CEL (GitHub)
CEL は標準ライブラリの といった、
非 Mutating アルゴリズムや関数オブジェクトを constexpr 化しています。


自分が公開している Sprout C++ Library も、そうした constexpr ライブラリの一つです。
Sprout (GitHub)

Sprout では主に以下のような機能を提供しています。

  • constexpr 文字列
  • constexpr タプル
  • constexpr バリアント
  • constexpr アルゴリズム
  • constexpr 範囲アルゴリズム
  • constexpr コンテナ操作
  • constexpr 乱数
  • constexpr ハッシュ関数
  • constexpr UUID
  • constexpr 構文解析
  • constexpr レイトレーシング


この記事では constexpr の可能性を示すものとして、このうちのレイトレーシングを取り上げてみることにします。