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 :

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 { ....}
Il y une seule donnée membre dans cette classe : T raw_data;.

Parmi toutes les fonctions membres, il y a :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
void swap(FixedPoint& other) {
	std::swap(raw_data, other.raw_data);
}
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
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);
}
}
SonarCube se plaint parce que j'utilise le namespace std justement. Pourtant, dans les explications du warning, il me dit :

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.
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.

Une idée ?

Merci d'avance