投稿者another question私は、クラス定義やインライン関数でODR違反が発生するため、匿名名前空間のヘッダーファイルからオブジェクトや関数を使用できないことに気付きました。この場合、const
またはconstexpr
static
というオブジェクトをinline
の関数またはクラスに安全に使用することは可能ですか?たとえば、CONSTANT
がnamespace
の中にある場合、それは安全ではありませんが、静的なリンケージで定数を使用するのは問題ありませんか?ODR準拠ヘッダーファイルの定数を使用
// some header file to be included by multiple .cpp files
static const/*expr*/ int CONSTANT = 2;
inline int f() {
return CONSTANT;
}
class Cls {
int mem = CONSTANT;
};
少なくともC++ではこれはもはや問題ではありません。奇妙なことに、タイプエイリアスはあなたの問題を解決することができます: 'CONSTANT = std :: integral_constantを使用すると; –
Barry
@Mオブジェクトのオブジェクトはodr-usedではありません。 –
N4606(これはisocpp.orgによる最新の標準ドラフト)はまだ "オブジェクトはodr-usedではありません" –