2013-11-15 51 views
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 { 
    } 
}; 

我使用Coverride關鍵字使編譯器發出一個錯誤,如果我得到的定義錯誤。當用GCC進行編譯時,我沒有收到任何錯誤並且程序編譯。我認爲這是正確的行爲,因爲function()在基類A中定義爲虛擬。

如果我編譯它與clang但是,它並沒有找到A的功能,並與漂亮的顏色發出一個編譯器錯誤:

test.cpp:10:2: error: only virtual member functions can be marked 'override' 
     void function() override { 

這是clang的錯誤呢,還是應該是這樣嗎?

+2

哪個版本的'clang'? – BoBTFish

+0

Sry,繼承人整個事情:'Debian鏗鏘版3.0-6.2(tags/RELEASE_30/final)(基於LLVM 3.0)' – Atle

+0

是的,這不是我的鏈上的問題:'clang-500.2.79(基於在LLVM 3.3svn上)' – WhozCraig

回答

1

你的代碼看起來正確的我,:

  • 它成功用gcc 4.8.1。

  • 它與鏗鏘3.1失敗。

  • 成功與鐺3.2。

我認爲這回答了這個問題。 (在RHEL 5.4上測試)。

編輯:看起來像它可能是this issue(不完全相同,但我發現最接近)。

+0

是的,我也無法編譯bug報告中的代碼。乾杯。 – Atle