Erreur avec spécialisation partielle de la matrice C de
-
29-09-2019 - |
Question
J'utilise PC-Lint (outil d'analyse de code statique - voir http://www.gimpel.com / ) Pour le morceau de code suivant:
class ASD {
protected:
template<int N>
void foo();
};
template<>
inline void ASD::foo<1>() {}
template<int N>
inline void ASD::foo() {}
PC-lint me donne un avertissement:
inline void ASD::foo<1>() {}
mysqldatabaseupdate.h(7) : Error 1060: protected member 'ASD::foo(void)' is not accessible to non-member non-friend functions
Je crois que le code est bien et l'erreur est du côté de la fibre, mais je pense que l'outil Lint est vraiment super outil et il est plus probable que je ne sais pas quelque chose. Alors est-ce code OK?
La solution 2
Le bogue a été dans PC-Lint lui-même. Il a été corrigé dans la dernière version.
Autres conseils
Vous avez une seule fonction foo
dans votre struct ASD
et il est dans la section protected
. Il n'est pas accessible à partir de fonctions non-membres. Dans le même temps struct ASD
n'a pas d'autres fonctions membres. Donc personne ont accès à foo
, je crois que c'est la raison de ce message d'erreur.
Essayez de changer votre struct à ce qui suit, par exemple:
class ASD {
public:
void bar() { foo<1>(); }
protected:
template<int N>
void foo();
};