widget.hpp
以下の内容のヘッダー ファイルがあるとします。
constexpr int foo = 10;
struct widget
{
int bars[foo];
};
...そして、 のみを含む 2 つのソース ファイルから生成された 2 つの翻訳単位がありwidget.hpp
ますfoo
。
foo
内部リンケージがありますが、定数式でもあります。以下に引用する C++11 標準の 3.2.6 を読んだところ、要件 2 が静的データ メンバーのみを参照していない場合、これは整形式です。
3.2.6 要件 #2:
D の各定義では、対応する名前は、3.4 に従って検索され、D の定義内で定義されたエンティティを参照するか、またはオーバーロードの解決 (13.3) および部分的なテンプレートの特殊化の一致 (14.8) の後に同じエンティティを参照する必要があります。 .3)ただし、オブジェクトが D のすべての定義で同じリテラル型を持ち、オブジェクトが定数式 (5.19) で初期化されている場合、名前は内部リンケージまたはリンケージなしの非揮発性 const オブジェクトを参照できます。オブジェクトは ODR 使用されておらず、オブジェクトは D のすべての定義で同じ値を持っています