以下はどのように機能しますか?
#include <limits>
int main()
{
const int* const foo = &std::numeric_limits<int> ::digits;
}
static const
-ant メンバーのアドレスを取得するには、リンカを満足させるために何らかの変換単位で物理的に定義する必要があるという印象を受けました。とはいえ、この TU の前処理されたコードを見た後、digits
メンバー (または他の関連メンバー) の外部定義を見つけることができませんでした。
これを 2 つのコンパイラ (VC++ 10 と g++ 4.2.4) でテストしたところ、両方から同じ結果が得られました (つまり、動作します)。リンカーは、このようなものが定義されているオブジェクト ファイルに対して自動的に魔法のようにリンクしますか、それともここで明らかな何かが欠けていますか?