2012-10-16 20 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; 
    } 
}; 

Bu bir VC++ 2012 hatası mı?Bir r değeri bildirebilir miyim?

+1

Türler r değerleri veya l değerleri değil; türleri * türleri *. L-değeri/r-değeri sınıflandırması * ifadeleridir *. –

+0

Referans olarak, C++ 0x bayrağı ile gcc 4.6.3 altında derler. Bence bu, hem döngülerin aynı olduğu düşünülürse haklıdır. –

+0

B :: operator == öğesindeki i türü const int olarak çıkarılır, bir VC hatası gibi görünür. – Andrey

cevap

6

Bu, bir VS2012 derleyici hatası gibi görünüyor. Spesifik olarak bu bölüm 7.1.6.2, paragraf 4'te oldukça açıktır. Nitekim, verilen örneklerden biri, a bir const-pointer ile referans veren bir ifadeyi göstermektedir. decltype(a->x), double verir, decltype((a->x)) ise double const &'u verir.

Bu bir hatadır; Derleyici, i'un const olduğunu ve bu nedenle ++ yapamadığını düşünür.

İlgili konular