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

时间:2013-11-15 10:59:20

标签: c++ gcc c++11 override clang

我有一个包含三个类的类树:

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 {
    }
};

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

如果我用clang编译它,它在A中找不到该函数,并发出编译错误,颜色很好:

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

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

1 个答案:

答案 0 :(得分:1)

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

  • 使用gcc 4.8.1成功。

  • 使用clang 3.1失败。

  • 使用clang 3.2成功

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

编辑:看起来可能是this issue(不相同,但我发现最接近)。