N3413 - Allowing arbitrary literal types for non-type template parameters
C++11で導入されたconstexprによって、コンパイル時により多くのことができるようになりました。constexprでできるようになったものの一つに「constexprなコンストラクタを持ち、その他細かい条件を満たすクラスは、コンパイル時定数になることができる」というのがあります。
struct C { constexpr C(int v) : v(v) { } int v; }; int main() { constexpr C c(3); int ar[c.v]; // オブジェクトcも、そのメンバ変数vも定数なので、配列の要素数にできる }
今回のこの提案は、このようなconstexprオブジェクトをテンプレート引数として渡せるようにしよう、というものです。
struct C { constexpr C(int v) : v(v) { } int v; }; template <C c> struct X { int ar[c.v]; };
これができるようになると、テンプレートの活用の幅が爆発的に広がるので、ぜひ入ってもらいたいですね。