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;
}
};
Czy to błąd VC++ 2012?Czy decltype może zadeklarować wartość r?
Typy nie są wartościami r ani l-valami; typy to * typy *. Klasyfikacja wartości l/wartość jest dla * wyrażeń *. –
Dla odniesienia, kompiluje się pod gcc 4.6.3 z flagą C++ 0x. Myślę, że to prawda, biorąc pod uwagę, że obie pętle są identyczne. –
Typ dla i w B :: operator == jest interpretowany jako const int, wygląda jak błąd VC. – Andrey