Bonjour,
SonarCube (installé récemment sur un de nos serveurs) râle sur du code écrit il y a longtemps, et je ne suis plus sûr de pourquoi le code avait été écrit ainsi. Je vais faire appel à vos lumières sur ce coup-là
J'ai une classe template :
Il y une seule donnée membre dans cette classe : T raw_data;.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 template<typename T, std::uint8_t integer, std::uint8_t fractional> class FixedPoint { ....}
Parmi toutes les fonctions membres, il y a :
Enfin, dans le même fichier hpp, il y a la spécialisation de std::swap() dans le namespace std :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 void swap(FixedPoint& other) { std::swap(raw_data, other.raw_data); }
SonarCube se plaint parce que j'utilise le namespace std justement. Pourtant, dans les explications du warning, il me dit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 namespace std { template<typename T, std::uint8_t integer, std::uint8_t fractional> void swap(data::FixedPoint<T, integer, fractional>& lhs, data::FixedPoint<T, integer, fractional>& rhs) { lhs.swap(rhs); } }
J'ai l'impression de respecter cette règle. La seule hypothèse que je vois, c'est qu'il manque peut-être un noexcept specifier.A program may add a template specialization for any standard library template to namespace std only if the declaration depends on a user-defined type and the specialization meets the standard library requirements for the original template and is not explicitly prohibited.
Une idée ?
Merci d'avance
Partager