Lint (CLang) 对 'override' 的专业化投诉

Lint (CLang) complaints on 'override' in specialization

以下示例代码可以在 MSVC 2012 中干净地编译:

struct S1
{
    virtual void f() {}
};

template<typename T> struct S2 : S1
{
    void f() override {}
};

template<> void S2<int>::f() override {}

但是,当我运行 PC-Lint Plus(基于CLang)在代码上,报错:

template<> void S2<int>::f()^ override {}
test.cpp(11): error 4645: expected ';' at end of declaration
template<> void S2<int>::f() override {}^
test.cpp(11): error 4933: expected ';' after top level declarator

顺便说一句,如果我删除了 override 说明符,lint 会发出一条注释,指出它丢失了。

这是 lint/CLang 错误还是我做错了什么?

你只需要函数声明中的override,而不是class定义之外的。只需删除它:

template<> void S2<int>::f() {}