#include <iostream>
#define O(x) std::cout << (x) << std::endl;
struct foo
{
foo() { O("foo"); }
~foo() { O("~foo"); }
};
struct bar
{
bar() { O("bar"); }
~bar() { O("~bar"); }
};
foo& global_foo()
{
static foo result;
return result;
}
bar& global_bar()
{
static bar result;
return result;
}
int main()
{
O("main");
global_foo();
global_bar();
O("~main");
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKI2RlZmluZSBPKHgpIHN0ZDo6Y291dCA8PCAoeCkgPDwgc3RkOjplbmRsOwoKc3RydWN0IGZvbwp7CiAgICBmb28oKSB7IE8oImZvbyIpOyB9CiAgICB+Zm9vKCkgeyBPKCJ+Zm9vIik7IH0KfTsKCnN0cnVjdCBiYXIKewogICAgYmFyKCkgeyBPKCJiYXIiKTsgfQogICAgfmJhcigpIHsgTygifmJhciIpOyB9Cn07Cgpmb28mIGdsb2JhbF9mb28oKQp7CiAgICBzdGF0aWMgZm9vIHJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7Cn0KCmJhciYgZ2xvYmFsX2JhcigpCnsKICAgIHN0YXRpYyBiYXIgcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKfQoKaW50IG1haW4oKQp7CiAgICBPKCJtYWluIik7CiAgICAKICAgIGdsb2JhbF9mb28oKTsKICAgIGdsb2JhbF9iYXIoKTsKICAgIAogICAgTygifm1haW4iKTsKfQ==