Может ли decltype объявить r-значение?

// 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?

9

Решение

Похоже, это ошибка компилятора VS2012. Спецификация достаточно ясна в этом, в разделе 7.1.6.2, параграф 4. Действительно, один из приведенных примеров показывает выражение, которое ссылается через const-указатель a, decltype(a->x) доходность double, в то время как decltype((a->x)) доходность double const &,

Так что это ошибка; компилятор считает, что i является constи, следовательно, не может ++ Это.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]