#include <iostream>
namespace A {
namespace B {
struct C {
struct D {
int e; // variable e lifetime is same with struct D lifetime. Available only within struct D initialized
D() : e(42) {}
} d; // variable d lifetime is samw with C struct lifetime. Available only within struct C initialized
C() {}
C(int v) {
d.e = v;
}
} c; // variable c lifetime is entire program. Scope is A::B::c
}
}
int main() {
// access variable with program lifetime in A::B namespace
std::cout << A::B::c.d.e << std::endl;
// create local variable of type A::B::C and access its fields
A::B::C myc(55);
std::cout << myc.d.e << std::endl;
// declare struct F within main function scope and access its fields
struct F {
int g;
F(int v) : g(v) { }
} f (100);
std::cout << f.g << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKbmFtZXNwYWNlIEEgewoJbmFtZXNwYWNlIEIgewoJCXN0cnVjdCBDIHsKCQkJc3RydWN0IEQgewogICAgICAgICAgICAgICAgaW50IGU7CS8vIHZhcmlhYmxlIGUgbGlmZXRpbWUgaXMgc2FtZSB3aXRoIHN0cnVjdCBEIGxpZmV0aW1lLiBBdmFpbGFibGUgb25seSB3aXRoaW4gc3RydWN0IEQgaW5pdGlhbGl6ZWQKICAgICAgICAgICAgICAgIEQoKSA6IGUoNDIpIHt9CgkJCX0gZDsJLy8gdmFyaWFibGUgZCBsaWZldGltZSBpcyBzYW13IHdpdGggQyBzdHJ1Y3QgbGlmZXRpbWUuIEF2YWlsYWJsZSBvbmx5IHdpdGhpbiBzdHJ1Y3QgQyBpbml0aWFsaXplZAoJCQlDKCkge30KCQkJQyhpbnQgdikgewoJCQkJZC5lID0gdjsKCQkJfQoJCX0gYzsJLy8gdmFyaWFibGUgYyBsaWZldGltZSBpcyBlbnRpcmUgcHJvZ3JhbS4gU2NvcGUgaXMgQTo6Qjo6YwoJfQp9CgppbnQgbWFpbigpIHsKCS8vIGFjY2VzcyB2YXJpYWJsZSB3aXRoIHByb2dyYW0gbGlmZXRpbWUgaW4gQTo6QiBuYW1lc3BhY2UKCXN0ZDo6Y291dCA8PCBBOjpCOjpjLmQuZSA8PCBzdGQ6OmVuZGw7CgkKCS8vIGNyZWF0ZSBsb2NhbCB2YXJpYWJsZSBvZiB0eXBlIEE6OkI6OkMgYW5kIGFjY2VzcyBpdHMgZmllbGRzCglBOjpCOjpDIG15Yyg1NSk7CglzdGQ6OmNvdXQgPDwgbXljLmQuZSA8PCBzdGQ6OmVuZGw7CgkKCS8vIGRlY2xhcmUgc3RydWN0IEYgd2l0aGluIG1haW4gZnVuY3Rpb24gc2NvcGUgYW5kIGFjY2VzcyBpdHMgZmllbGRzCglzdHJ1Y3QgRiB7CgkJaW50IGc7CgkJRihpbnQgdikgOiBnKHYpIHsgfQoJfSBmICgxMDApOwoJc3RkOjpjb3V0IDw8IGYuZyA8PCBzdGQ6OmVuZGw7CgkKCXJldHVybiAwOwp9