gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:05:20 26 4
gpt4 key购买 nike

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

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 上测试)。

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

关于c++ - Clang 和派生模板类中的 'override' 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19999512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com