Мне немного любопытно, что особенного в элементах структуры шаблона. В частности, кажется, что я не могу определить неинициализированные статические члены в шаблонных классах / структурах.
Обратите внимание, что следующий фрагмент не связывает, с неопределенной ссылкой на Struct<int>::member
template <typename T>
struct Struct {
static T member;
};
template <typename T>
T foo(T t) {
return Struct<T>::member = t;
}
template struct Struct<int>;
template <>
int Struct<int>::member;
int main() {
return foo(1);
}
Однако, казалось бы, эквивалент
struct StructInt {
static int member;
};
int foo(int t) {
return StructInt::member = t;
}
int StructInt::member;
int main() {
return foo(1);
}
компилируется без ошибок.