Clang 和派生模板类中的“override”关键字
Clang and the 'override' keyword in derived template classes
>我有一个包含三个类的类树,如下所示:
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 上测试)。
编辑:看起来可能是这个问题(不相同,但最接近我发现)。
相关文章:
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- C++中的"inline"关键字
- 如何确保C++函数在定义之前声明(如override关键字)
- 谷歌模拟和覆盖关键字
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 为什么"delete"关键字不删除节点?
- 在 c++ 中正确定义"this"关键字?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- C++ - 为什么这里需要'template'关键字?
- C++函数的关键字?
- 'override'关键字只是对被覆盖的虚拟方法的检查吗?
- 是否强制使用c++override关键字
- Clang 和派生模板类中的“override”关键字
- 如何在C++中使用override关键字进行多重泛型继承
- 使用'virtual'和'override'关键字声明重写的方法是好还是坏?
- QtCreator:如何将"override"和"final"注册为关键字?
- 如何将override关键字添加到大型C++代码库中