diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index 2b972e221fc..e5d4991acd0 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -3269,6 +3269,8 @@ void CheckClass::checkOverride() continue; if (func.tokenDef->isExpandedMacro()) continue; + if (func.templateDef) + continue; const Function *baseFunc = func.getOverriddenFunction(); if (baseFunc) overrideError(baseFunc, &func); diff --git a/test/testclass.cpp b/test/testclass.cpp index 9698916c41a..44b9cd499a9 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -8835,6 +8835,16 @@ class TestClass : public TestFixture { "};\n"); ASSERT_EQUALS("[test.cpp:2:14] -> [test.cpp:5:6]: (style) The destructor '~D' overrides a destructor in a base class but is not marked with a 'override' specifier. [missingOverride]\n", errout_str()); + + checkOverride("struct B {\n" // #14581 + " virtual void f();\n" + "};\n" + "struct D : B {\n" + " void f() override;\n" + " template \n" + " void f();\n" + "};\n"); + ASSERT_EQUALS("", errout_str()); } void overrideCVRefQualifiers() {