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

Đây có phải là lỗi của VC++ 2012 không?Có thể decltype khai báo giá trị r?

+1

Các loại không phải là giá trị r hoặc l-vales; các loại * loại *. Phân loại giá trị l-giá trị/r là cho * biểu thức *. –

+0

Để tham khảo, nó biên dịch theo gcc 4.6.3 với cờ C++ 0x. Tôi nghĩ rằng điều này là đúng, xem xét cả hai vòng của bạn là giống hệt nhau. –

+0

Loại cho i trong B :: operator == được suy ra như const int, trông giống như một lỗi VC. – Andrey

Trả lời

6

Điều này dường như là lỗi trình biên dịch VS2012. Thông số này khá rõ ràng về điều này, trong phần 7.1.6.2, đoạn 4. Thật vậy, một trong các ví dụ được đưa ra cho thấy một biểu thức tham chiếu thông qua một con trỏ const a. decltype(a->x) sản lượng double, trong khi decltype((a->x)) sản lượng double const &.

Vì vậy, đó là lỗi; trình biên dịch cho rằng iconst và do đó không thể ++ nó.

Các vấn đề liên quan