次のような 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キーワード inを使用してC、定義が間違っている場合にコンパイラにエラーを発行させます。でコンパイルするとGCC、エラーは発生せず、プログラムはコンパイルされます。function()基本クラスで virtual が定義されているため、これは正しい動作だと思いますA。
ただし、これをコンパイルするとclang、 に関数が見つからず、A素敵な色でコンパイル エラーが発生します。
test.cpp:10:2: error: only virtual member functions can be marked 'override'
void function() override {
これは のバグclangですか、それともこうあるべきなのでしょうか?