c++ - Lint (CLang) 对 'override' 的特化投诉

标签 c++ visual-studio-2012 clang overriding template-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,而不是在类定义之外。只需删除它:

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

关于c++ - Lint (CLang) 对 'override' 的特化投诉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43880158/

相关文章:

c++ - 在 header C++ 中初始化变量

c# - 在 C# 中使用 PHP nuSOAP 网络服务

clang - 如何启用 clang-tidy 的 "modernize"检查?

c++ - libc++:为什么关闭后流仍然很好

c++ - 尽管构建成功,但 Eclipse Neon 构建错误

c++ - 您如何将 CreateThread 用于作为类成员的函数?

c++ - 值传递和 std::move 优于传递引用的优点

asp.net-mvc - 加载符号时,Visual Studio 调试速度很慢

c++ - 不同的 IDE 产生 0 个错误与 28 个错误

macos - 如何在 OSX 上安装特定的 clang 版本?