列挙値である静的メンバーを持つクラスがたくさんあります。そして、この列挙型をキーとして別の場所にマップを持っています。関数でテンプレート パラメーターを使用してマップにアクセスすると、未定義の参照が取得されます。
明確にするために、単純化された動作しない例を次に示します。
template<int T>
struct A
{
static const int Type = T;
}
template<class T>
void fun()
{
cout << map_[T::Type] << endl;
}
map<int, string> map_{{1337, "1337"}};
主要 :
fun<A<1337>();
私に与えます(g ++ 4.7):
undefined reference to `(anonymous namespace)::A<1337>::Type'
ただし、これ:
template<class T>
void fun()
{
auto key = T::Type;
cout << map_[key] << endl;
}
コンパイルして印刷する1337
誰かが私にこの振る舞いを説明できますか?