クラステンプレートの静的メンバの初期化は異なる翻訳単位で複数回可能だよ

http://d.hatena.ne.jp/Cryolite/20051003#p1 の2番目の手法とかで,クラステンプレートの静的メンバの初期化をヘッダファイルでやっちゃうけれど,これって One Definition Rule (ODR) に違反する(同じヘッダを #include する異なる翻訳単位で2重に静的メンバを定義してしまう)んじゃないの?とかふと疑問に思った.ので調べた.


3.2 One definition rule
5 There can be more than one definition of a class type (clause 9), enumeration type (7.2), inline function with external linkage (7.1.2), class template (clause 14), non-static function template (14.5.5), static data member of a class template (14.5.1.3), member function of a class template (14.5.1.1), or template specialization for which some template parameters are not specified (14.7, 14.5.4) in a program provided that each definition appears in a different translation unit, and provided the definitions satisfy the following requirements. (以下略)

ずががががーん.初めて知った…….っていうことで結論として http://d.hatena.ne.jp/Cryolite/20051003#p1 の2番目のヤツの ODR は O.K. と.っていうか,この仕様がないとクラステンプレートの静的メンバの初期化ってすごい困るもんな.