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のバグですか?decltypeはr値を宣言できますか?
タイプはr値またはl値ではありません。型は*型*です。 l値/ r値の分類は*式*のものです。 –
参考として、gcc 4.6.3でC++ 0xフラグを付けてコンパイルします。私はあなたの両方のループが同一であると考えて、これが正しいと思います。 –
B :: operator ==のiの型はconst intと推定され、VCバグのように見えます。 – Andrey