У меня есть этот простой код:
#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;
    }
}
Как и ожидалось, у меня есть ошибка построения в первом для цикла - A:: B является закрытым, но второй для компиляции цикла отлично в Visual Studio 2010, 2012 и 2013 годах. Является ли это обычным поведением или это ошибка в компиляторе?