Initialisation de membre statique dans un modèle de classe

J’aimerais faire ça:

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

mais je ne peux pas puisque something_relevant n’est pas de type intégral. Cela ne dépend pas de T , mais le code existant dépend de son statut de membre statique de S

Puisque S est template, je ne peux pas mettre la définition dans un fichier compilé. Comment résoudre ce problème?

Il suffit de le définir dans l’en-tête:

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

Comme il fait partie d’un modèle, comme pour tous les modèles, le compilateur s’assurera qu’il n’est défini qu’une seule fois.

Cela fonctionnera

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

Depuis C ++ 17, vous pouvez maintenant déclarer le membre statique en ligne, ce qui définira la variable dans la définition de classe:

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

en direct: https://godbolt.org/g/bgSw1u