类外的静态变量实例化

所以我有这个文件

template <typename T>
class TestStatic {
public:
    static int staticVal;
};

//static member initialization
template<typename T> int TestStatic<T>::staticVal;

我不明白为什么我必须实例化Staticval是不是已经在类定义中实例化了?它还为每种模板参数类型生成一个静态变量吗?

提前致谢。