クラススコープの変数テンプレート
クラススコープでは,変数テンプレートは静的なメンバ変数でしか使えない.
struct X { // OK template<class T> static T hoge = T{}; // NG template<class T> T huga = T{}; };
なので,オブジェクトごとにメンバ変数テンプレートを持つということはできない. 少なくとも現時点での clang のエラーメッセージではどこがまずいのか気づけなかった.
error: member 'huga' declared as template
non static data member initializer は C++11 ですでにあるので,クラスの非静的データメンバとして変数テンプレートを持ててもおかしくないと思っていたけれど,N3651 の変数テンプレートの規格改訂提案にも
A variable template at class scope is a static data member template
とちゃんと書いてあった. @cpp_akira さんに言われて気づいたけれど,クラスのサイズが定まらなくなってしまうので,確かにまずい.
また忘れて同じことをしてハマりそうなのでメモ.