// 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?
Похоже, это ошибка компилятора VS2012. Спецификация достаточно ясна в этом, в разделе 7.1.6.2, параграф 4. Действительно, один из приведенных примеров показывает выражение, которое ссылается через const-указатель a
, decltype(a->x)
доходность double
, в то время как decltype((a->x))
доходность double const &
,
Так что это ошибка; компилятор считает, что i
является const
и, следовательно, не может ++
Это.
Других решений пока нет …