Ошибка с C ++ частичной специализации шаблона - PullRequest
2 голосов
/ 18 августа 2010

Я использую PC-Lint (отличный инструмент для статического анализа кода - см. http://www.gimpel.com/) Для следующего фрагмента кода:

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 - ДЕЙСТВИТЕЛЬНО отличный инструмент, и он более вероятен, чем я чего-то не знаю. Так этот код в порядке?

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

У вас есть только одна функция foo в вашем struct ASD, и она находится в разделе protected. Он не доступен из функций, не являющихся членами. В то же время struct ASD не имеет других функций-членов. Так что никто не имеет доступа к foo, я думаю, что это причина этого сообщения об ошибке.

Попробуйте изменить свою структуру следующим образом, например:

class ASD {
    public:
        void bar() { foo<1>(); }
    protected:
        template<int N>
        void foo();
};
1 голос
/ 16 сентября 2010

Ошибка была в самом PC-Lint. Это было исправлено в последней версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...