C ++模板部分特化的错误

时间:2010-08-18 13:44:05

标签: c++ templates specialization partial-specialization access-levels

我正在使用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方面,但我认为Lint工具真的很棒的工具,它比我不知道的东西更可能。那么这段代码好吗?

2 个答案:

答案 0 :(得分:2)

foo中只有只有一个函数struct ASD,它位于protected部分。无法从非成员函数访问它。同时struct ASD没有任何其他成员函数。所以没有人可以访问foo,我相信这就是错误信息的原因。

尝试将结构更改为以下内容,例如:

class ASD {
    public:
        void bar() { foo<1>(); }
    protected:
        template<int N>
        void foo();
};

答案 1 :(得分:1)

该错误发生在PC-Lint本身。它已在最新版本中修复。