### Static Data Members and Templates

A static declaration within a class template declares a static data member for each template class generated from the template. The static declaration can be of template argument type or of any defined type.

Like member function templates , you can explicitly define a static data member of a template class at file scope for each type used to instantiate a template class. For example:

    template <class T> class key
    {
    public:
          static T x;
    };
    int key<int>::x;
    char key<char>::x;
    void main()
    {
          key<int>::x = 0;
    }

You can also define a static data member of a template class using a template definition at file scope. For example:

    template <class T> class key
    {
    public:
          static T x;
    };
    template <class T> T key<T> ::x; // template definition
    void main()
    {
          key<int>::x = 0;
    }

When you instantiate a template class, you must have either an explicit definition or a template definition for each static data member, but not both.

Class Templates

Example of Static Data Members in Templates

Static Members
Explicitly Defined Template Classes
File Scope
Function Templates
Member Function Templates
Explicitly Defined Template Functions