¿Por qué no se inicializan los campos de plantillas estáticas a menos que se utilicen? [duplicar]

Posible duplicado:
(Inicialización estática / creación de instancias de plantilla) problemas con el patrón de fábrica
tratando de forzar la inicialización de objetos estáticos

EDIT: Hay un duplicado de esto, pero lo dejaré ya que personalmente tuve problemas para encontrarlo. Además aquí está la respuesta que me ayudó:

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

Supongamos la siguiente clase:

<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>

Habría asumido que cuando me especializoA, el campo estáticox sería inicializado. Sin embargo, lo siguiente:

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

no resulta en una llamada afoo. Si intento acceder al miembro, el comportamiento es el esperado:

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

EDITAR:Como puedo asegurarmeA::x ¿Se inicializa sin acceder a él?

Respuestas a la pregunta(2)

Su respuesta a la pregunta