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() {}
以下示例代码可以在 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() {}