クラステンプレートが static なデータメンバを持っているとき、複数のコンパイル単位で、
その static なデータメンバの定義を行っても、リンク時に一つにまとめられてしまうよう
なのですが、これは規格に則った動作でしょうか。

-- X.h --
template<class T> class X {
static T x;
};
template<class T> T X<T>::x;

-- Foo.cpp --
#include "X.h"

void foo()
{
X<int> a;
}

-- Hoge.cpp --
#include "X.h"

void hoge()
{
X<int> b;
}

ここで Foo.cpp と Hoge.cpp をコンパイルしてリンクしても、とくに X<int>::x の
多重定義にはならず、正常にリンクされます。(g++ と VC++ で確認)

しかし、C++第3版の 13章7節によると「非inline の static メンバは、どこかの翻訳単位に
ユニークな定義を持たなければならない。」とあり、上のような動作は保証されていない
ようなのです。