Por que os campos de modelo estático não são inicializados a menos que sejam usados? [duplicado]

Duplicata Possível:
(inicialização estática / instanciação de modelo) problemas com padrão de fábrica
tentando forçar a inicialização de objeto estático

EDIT: Há uma duplicata disso, mas eu vou deixar isso como eu pessoalmente tive problemas para encontrá-lo. Além disso, aqui está a resposta que me ajudou:

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

Suponha a seguinte classe:

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

Eu teria assumido que quando eu me especializarA, o campo estáticox seria inicializado. No entanto, o seguinte:

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

não resulta em uma chamada parafoo. Se eu tentar acessar o membro, o comportamento é o esperado:

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

EDITAR:Como posso ter certezaA::x é inicializado sem acessá-lo?

questionAnswers(2)

yourAnswerToTheQuestion