gcc 4.5.1, SuSE Linux i686C++ membri dei modelli statici emissione di inizializzazione
Supponiamo di avere seguente codice:
template<typename realT> class B
{
public:
B() {std::cout << "B()" << std::endl;}
};
template<typename realT> class A
{
public:
static B<realT> static_var;
};
template<typename realT> B<realT> A<realT>::static_var;
template<> B<float> A<float>::static_var;
template<> B<double> A<double>::static_var;
int main()
{
A<float> test;
return 0;
}
In questo caso non avrà alcun output in stdout. Compilatore non genererà il codice per inizializzare float e double specializzazione della classe A.
Ma .. se cambieremo inizializzazioni come questo:
template<> B<float> A<float>::static_var = B<float>();
template<> B<double> A<double>::static_var = B<double>();
il compilatore genera tale codice e avremo doppio "B()" nell'output.
Qualcuno può aiutarmi a comprendere un simile comportamento?
Grazie per la risposta! – Ribtoks
Quindi cosa si fa se 'x' deve essere inizializzato dal costruttore predefinito (senza C++ 11)? – VF1