Я использую PC-Lint (отличный инструмент для статического анализа кода - см http://www.gimpel.com/) Для следующего фрагмента кода:Ошибки при частичной специализации C++ шаблон
class ASD {
protected:
template<int N>
void foo();
};
template<>
inline void ASD::foo<1>() {}
template<int N>
inline void ASD::foo() {}
PC-Lint дает мне предупреждение:
inline void ASD::foo<1>() {}
mysqldatabaseupdate.h(7) : Error 1060: protected member 'ASD::foo(void)' is not accessible to non-member non-friend functions
Я считаю, что код является штраф, и ошибка на стороне ворса, но я думаю, что Lint инструмент действительно отличный инструмент, и это более вероятно, чем я не знаю, что-то. Так и этот код в порядке?
Но не было ли у каких-либо произвольных дочерних классов доступ к функции 'foo'? –
В этом примере, и я верю в код, который производит ошибку, нет дочерних классов. –
Попробуйте добавить к классу виртуальную функцию. Это может сделать компромисс здесь. –