Inizializzazione dei membri statici in un modello di class

Mi piacerebbe farlo:

template  struct S { ... static double something_relevant = 1.5; }; 

ma non posso perché something_relevant di rilevante non è di tipo integrale. Non dipende da T , ma il codice esistente dipende dal fatto che sia un membro statico di S

Poiché S è template, non posso inserire la definizione in un file compilato. Come risolvo questo problema?

Basta definirlo nell’intestazione:

 template  struct S { static double something_relevant; }; template  double S::something_relevant = 1.5; 

Poiché fa parte di un modello, come con tutti i modelli, il compilatore si assicurerà che sia definito solo una volta.

Questo funzionerà

 template  struct S { static double something_relevant; }; template double S::something_relevant=1.5; 

Dal momento che C ++ 17, è ora ansible dichiarare il membro statico in linea, che definirà la variabile nella definizione della class:

 template  struct S { ... static inline double something_relevant = 1.5; }; 

live: https://godbolt.org/g/bgSw1u