2012-10-16 68 views
9
// Compiled by Visual Studio 2012 

struct A 
{ 
    bool operator ==(const A& other) const 
    { 
     for (decltype(this->n) i = 0; i < n; ++i) // OK 
     {} 

     return true; 
    } 

protected: 
    size_t n; 
}; 

struct B : public A 
{ 
    bool operator ==(const B& other) const 
    { 
     for (decltype(this->n) i = 0; i < n; ++i) // error C2105: '++' needs l-value 
     {} 

     return true; 
    } 
}; 

這是VC++ 2012的bug嗎?decltype可以聲明一個r值嗎?

+1

類型不是r值或l值;類型是*類型*。 l值/ r值分類用於*表達式*。 –

+0

作爲參考,它使用C++ 0x標誌在gcc 4.6.3下編譯。我認爲這是對的,考慮到你的循環是相同的。 –

+0

我在B :: operator ==中的類型被推導爲const int,看起來像一個VC bug。 – Andrey

回答

6

這似乎是一個VS2012編譯器錯誤。這個規範很清楚,在7.1.6.2節的第4段中。的確,給出的例子之一顯示了一個通過const指針a引用的表達式。 decltype(a->x)收率爲double,而decltype((a->x))收益率爲double const &

所以這是一個錯誤;編譯器認爲iconst,所以不能++呢。

相關問題