我有一个包含三个类的类树:
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
中的错误,还是应该是这样?
答案 0 :(得分:1)
您的代码对我来说是正确的,并且:
使用gcc 4.8.1成功。
使用clang 3.1失败。
使用clang 3.2成功。
我认为这回答了这个问题。 (在RHEL 5.4上测试过)。
编辑:看起来可能是this issue(不相同,但我发现最接近)。