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