While templates have only one definition (for example, you have only one translation unit), it is clearly defined. Static members are initialized in the order in which custom patterns are created in contexts that require the definition of a static data item. From paragraph 14.7.1 / 1 [temp.inst] of the C ++ 03 standard (my emphasis):
If the template template specification has not been explicitly created (14.7.2) or explicitly specialized (14.7.3), the class template specialization is implicitly created when the specialization is referenced in a context that requires a fully defined type of object or when the completeness of the class type affects the semantics of the program. Implicit instantiation of a template specialization causes implicit creation of declarations, but not default definitions or arguments, class member functions, member classes, static data elements, and member templates; and this causes the implicit creation of definitions of membership anonymous unions. If a class template member or member template has not been explicitly created or has not been explicitly specialized, a member specialization is implicitly created when the specialization is referenced in a context that requires a member definition; in particular, initialization (and any side effects associated with it) of a static data member does not occur if the static data member itself is not used in such a way that a definition of the static data member is required.
ยง14.7.1 / 7 also states:
Implicit creation of a class template does not result in an implicit instance of any static data members of this class.
However, things get complicated when you have several translation units that define a template. In ยง3.2 / 5 [basic.def.odr] it is stated:
There can be more than one definition of a class type (section 9), an enumeration type (7.2), an inline function with external communication (7.1.2), a class template (section 14), a non-static function template (14.5.5), a static data member of a class template (14.5.1.3), a member function of a class template (14.5.1.1) or a specialized specialization of a template for which some template parameters are not specified (14.7, 14.5.4) in the program, provided that each definition appears in a different translation unit and when provided that the definitions satisfy the following requirements. Given such an object named D, defined in more than one translation unit, then
(list of conditions ...)
If the definitions of D satisfy all these requirements, then the program should behave as if there was one definition of D. If the definitions of D do not satisfy these requirements, then the behavior is undefined.
Please note that the standard does not indicate which definition is taken as one definition only if some definition is selected. Thus, if several translation blocks create templates in different orders, there is no guarantee that it will be an initialization order.