Clang 和派生模板类中的“override”关键字

Clang and the 'override' keyword in derived template classes

本文关键字:override 关键字 派生 Clang      更新时间:2023-10-16

>我有一个包含三个类的类树,如下所示:

class A {
    public:
    virtual void function() = 0;
};
template<typename type> class B : public A {
};
template<typename type> class C : public B<type> {
    void function() override {
    }
};

我在 C 中使用 override 关键字,以便在定义错误时使编译器发出错误。使用 GCC 编译时,我没有收到任何错误,程序可以编译。我认为这是正确的行为,因为function()在基类A中被定义为虚拟的。

但是,如果我用clang编译它,它会在A中找到该函数,并发出带有漂亮颜色的编译器错误:

test.cpp:10:2: error: only virtual member functions can be marked 'override'
        void function() override {

这是clang中的错误,还是应该是这样?

你的代码对我来说是正确的,并且:

  • 它在 gcc 4.8.1 中取得成功。

  • 它在 clang 3.1 时失败。

  • 它在 clang 3.2 中取得成功

我认为这回答了这个问题。(在 RHEL 5.4 上测试)。

编辑:看起来可能是这个问题(不相同,但最接近我发现)。