#include <iostream>
struct A {
void bar();
private:
struct B {
int i = 42;
};
};
/* compile error
void foo(const A::B& value) {
std::cout << value.i;
}
*/
/** everything is ok */
template<typename T>
void foo(const T& value) {
std::cout << value.i;
}
void A::bar() {
A::B b;
foo(b);
}
int main() {
A a;
a.bar();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEgewogdm9pZCBiYXIoKTsKcHJpdmF0ZToKIHN0cnVjdCBCIHsKIAlpbnQgaSA9IDQyOwogfTsKfTsKCi8qIGNvbXBpbGUgZXJyb3IgCnZvaWQgZm9vKGNvbnN0IEE6OkImIHZhbHVlKSB7CglzdGQ6OmNvdXQgPDwgdmFsdWUuaTsKfQoqLwoKLyoqIGV2ZXJ5dGhpbmcgaXMgb2sgKi8KdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBmb28oY29uc3QgVCYgdmFsdWUpIHsKCXN0ZDo6Y291dCA8PCB2YWx1ZS5pOwp9CgoKdm9pZCBBOjpiYXIoKSB7CglBOjpCIGI7IAoJZm9vKGIpOwp9CgoKaW50IG1haW4oKSB7CglBIGE7CglhLmJhcigpOwoJcmV0dXJuIDA7Cn0=