3

我有一个像这样的三个类的类树:

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关键字 inC使编译器发出错误。使用 编译时GCC,我没有收到任何错误并且程序编译。我认为这是正确的行为,因为function()在基类中定义为 virtual A

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

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

这是一个错误clang,还是应该是这样?

4

1 回答 1

1

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

  • 它使用 gcc 4.8.1 成功。

  • 它在 clang 3.1 中失败。

  • 它在 clang 3.2 中成功

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

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

于 2013-11-15T11:03:18.970 回答