#include <iostream>
class X {
private:
struct B {
B() { y = 2012; }
int y;
};
B b;
public:
X() {}
B& GetB() { return b; }
};
int main()
{
X x;
auto& g = x.GetB();
// Why do we have access to X::B here?
std::cout << g.y;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgWCB7CnByaXZhdGU6CglzdHJ1Y3QgQiB7CgkJQigpIHsgeSA9IDIwMTI7IH0KCQlpbnQgeTsKCX07CglCIGI7CgpwdWJsaWM6CglYKCkge30KCUImIEdldEIoKSB7IHJldHVybiBiOyB9Cn07CgppbnQgbWFpbigpCnsKCVggeDsKICAgICAgICBhdXRvJiBnID0geC5HZXRCKCk7CgkvLyBXaHkgZG8gd2UgaGF2ZSBhY2Nlc3MgdG8gWDo6QiBoZXJlPwoJc3RkOjpjb3V0IDw8IGcueTsKCglyZXR1cm4gMDsKfSA=