Warum werden statische Vorlagenfelder nur initialisiert, wenn sie verwendet werden? [Duplikat]

Mögliche Duplikate:
(statische Initialisierung / Vorlageninstanziierung) Probleme mit dem Factory-Muster
versucht, die statische Objektinitialisierung zu erzwingen

EDIT: Es gibt ein Duplikat davon, aber ich lasse es hier, da ich persönlich Probleme hatte, es zu finden. Außerdem ist hier die Antwort, die mir geholfen hat:

https://stackoverflow.com/a/2852234/673730

Nehmen wir die folgende Klasse an:

<code>template<class X>
struct A
{
   static bool x;
   static bool foo()
   {
      cout << "here";
      return true;
   }
};

template<class X>
bool A<X>::x = A<X>::foo();
</code>

Ich hätte das angenommen, wenn ich mich spezialisiert hätteAdas statische Feldx würde initialisiert werden. Folgendes jedoch:

<code>A<int> a;
//no output
</code>

führt nicht zu einem Anruf anfoo. Wenn ich versuche, auf das Mitglied zuzugreifen, ist das Verhalten wie erwartet:

<code>A<int> a;
bool b = a.x;
//output: here
</code>

BEARBEITEN:Wie kann ich das sicherstellen?A::x wird initialisiert, ohne darauf zuzugreifen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage