J'essaie actuellement d'avoir une variable constante à la compilation qui est spécialisée pour plusieurs types. Actuellement, j'utilise des expressions constantes telles que l'exemple généralisé suivant :
template<typename T>
constexpr T GENERAL_CONSTANT = T(0.01);
template<> constexpr float GENERAL_CONSTANT<float> = float(0.02);
template<> constexpr double GENERAL_CONSTANT<double> = double(0.03);
Ce code ne semble toutefois fonctionner qu'avec certains compilateurs/liens. Il compile et fonctionne correctement avec Clang 9.0.0 pour Windows 10, Clang 6.0.0 pour Windows 10, Clang 6.0.0 pour Ubuntu 18.04, et GCC pour Ubuntu 18.04. Mais il a donné des erreurs similaires de redéfinition multiple dans plusieurs autres configurations telles que Clang 10.0.0 sur Windows 10 ou Clang 10.0.0 sur Unix, ainsi que quelques autres. Les erreurs ressemblent souvent à ceci :
/usr/bin/ld: <some path to a.cpp> multiple definition of `GENERAL_CONSTANT<double>'; <some path to a.cpp>: first defined here
/usr/bin/ld: <some path to a.cpp> multiple definition of `GENERAL_CONSTANT<float>'; <some path to a.cpp>: first defined here
Où 'a.cpp' est le fichier qui utilise les constantes, mais ne les définit pas. Etant donné que cette erreur se produit de manière incohérente en fonction du compilateur et de la machine, j'étais curieux de savoir s'il s'agissait d'une approche non standard de ce problème, et si c'est le cas, quelle approche devrais-je adopter à la place ?