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 の可能性を示すものとして、このうちのレイトレーシングを取り上げてみることにします。