3

次のような 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ですか、それともこうあるべきなのでしょうか?

4

1 に答える 1

1

あなたのコードは私には正しいように見えます。

  • gcc 4.8.1 で成功します。

  • clang 3.1 で失敗します。

  • それはclang 3.2で成功します。

それが質問に答えると思います。(RHEL 5.4 でテスト済み)。

編集:この問題のようです(同一ではありませんが、私が見つけた最も近いものです)。

于 2013-11-15T11:03:18.970 に答える