C++相談室 part17
■ このスレッドは過去ログ倉庫に格納されています
0274デフォルトの名無しさん
NGNGその 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 メンバは、どこかの翻訳単位に
ユニークな定義を持たなければならない。」とあり、上のような動作は保証されていない
ようなのです。
■ このスレッドは過去ログ倉庫に格納されています