Spécialisation de std::swap() dans le namespace std
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à :aie:
J'ai une classe template :
Code:
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:
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:
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 :
Citation:
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 :ccool: