struct base {};
class outer: public base
{
private:
enum { some=42, special=67, implementation=999, details=-13 };
public:
struct inner
{
protected:
void foo() { int can_usethis = special + implementation + details; }
};
outer() : _inner() { }
void call_inner(inner& i) const
{
//i.foo(); // fails (protected)
}
void call_inner() const
{
//_inner.foo(); // fails (protected)
}
private:
inner _inner;
};
int main()
{
outer o;
outer::inner i;
// i.foo(); // fails: protected
o.call_inner(i);
}
c3RydWN0IGJhc2Uge307CgpjbGFzcyBvdXRlcjogcHVibGljIGJhc2UKewogIHByaXZhdGU6CiAgICBlbnVtIHsgc29tZT00Miwgc3BlY2lhbD02NywgaW1wbGVtZW50YXRpb249OTk5LCBkZXRhaWxzPS0xMyB9OwoKICBwdWJsaWM6CiAgICBzdHJ1Y3QgaW5uZXIgCiAgICB7IAogICAgICBwcm90ZWN0ZWQ6IAogICAgICAgIHZvaWQgZm9vKCkgeyBpbnQgY2FuX3VzZXRoaXMgPSBzcGVjaWFsICsgaW1wbGVtZW50YXRpb24gKyBkZXRhaWxzOyB9IAogICAgfTsKCiAgICBvdXRlcigpIDogX2lubmVyKCkgeyB9CgogICAgdm9pZCBjYWxsX2lubmVyKGlubmVyJiBpKSBjb25zdCAKICAgIHsgCiAgICAgICAgLy9pLmZvbygpOyAvLyBmYWlscyAocHJvdGVjdGVkKQogICAgfQoKICAgIHZvaWQgY2FsbF9pbm5lcigpIGNvbnN0IAogICAgeyAKICAgICAgICAvL19pbm5lci5mb28oKTsgLy8gZmFpbHMgKHByb3RlY3RlZCkKICAgIH0KCiAgcHJpdmF0ZToKICAgIGlubmVyIF9pbm5lcjsKfTsKCgppbnQgbWFpbigpCnsKICAgIG91dGVyIG87CiAgICBvdXRlcjo6aW5uZXIgaTsKCiAgICAvLyBpLmZvbygpOyAvLyBmYWlsczogcHJvdGVjdGVkCiAgICBvLmNhbGxfaW5uZXIoaSk7Cn0K