#include <iostream>
template <class T>
class MyClass{
public:
MyClass(int m) : _m(m){}
// do not allocate memory for static member at this line
static int counter;
private:
T _m;
};
// allocate memory for static member at this line when MyClass is instantiated
template<class T>
int MyClass<T>::counter = 2;
int main(){
// No additional memory allocated for static member
MyClass<int> obj(1);
MyClass<float> objf(1);
std::cout << MyClass<int>::counter << "\n";
std::cout << MyClass<float>::counter << "\n";
MyClass<float>::counter = 3;
std::cout << MyClass<int>::counter << "\n";
std::cout << MyClass<float>::counter << "\n";
return 0;
}