Refer to Effective C++ 3rd item 4. The Relative order of initialization of non-local static objects defined in different translation units is undefined. main.cpp -------------------------- testVar var; int _tmain(int argc, _TCHAR* argv[]) { int t[16]; memcpy( t, var.getVar(), 16 * sizeof(int) ); return 0; } The t will be set [ 0, 0, 0,...... ]. It is wrong, I have set the t to g_identity. I must occur the relative order problem. Below is the original source code. testVar.h -------------------------- template class testVar { private: Type var[16]; static const testVar g_identity; }; testVar.inl ----------------------- template const testVar testVar ::g_identity( 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ); template testVar ::testVar() { setIdentity(); } template void testVar ::setIdentity() { ...