自动更改C++中的内部类型可见性?

Mir*_*pas 10 c++ c++11

我有这个简单的代码:

#include <vector>

class A
{
    private:
        struct B{int x;};
    public:
        std::vector<B> v;
};

int main()
{
    A a;

    for (std::vector<A::B>::iterator it = a.v.begin(); it != a.v.end(); ++it)
    {
        it->x = 0;
    }
    for (auto it = a.v.begin(); it != a.v.end(); ++it)
    {
        it->x = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我在第一个for循环中构建了错误--A :: B是私有的,但是第二个for循环在Visual Studio 2010,2012和2013中编译得很好.这是正常行为还是编译器中的错误?