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 的错误吗?

4

1 回答 1

6

这似乎是一个 VS2012 编译器错误。规范在第 7.1.6.2 节第 4 段中对此非常清楚。确实,给出的示例之一显示了通过 const-pointer 引用的表达式adecltype(a->x)产量double,同时decltype((a->x))产量double const &

所以这是一个错误;编译器认为iconst,因此不能++

于 2012-10-16T06:07:41.537 回答