#include <iostream>
#include <cstddef>
using namespace std;
struct Containing {
int x;
struct {
Containing * get_containing () {
return reinterpret_cast<Containing *> (
this - offsetof (Containing, inner)
);
}
int y;
} inner;
};
int main () {
Containing c;
std::cout
<< (c.inner.get_containing () == &c ? "success" : "fail")
<< std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGRlZj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBDb250YWluaW5nIHsKCWludCB4OwogICAgc3RydWN0IHsKICAgICAgICBDb250YWluaW5nICogZ2V0X2NvbnRhaW5pbmcgKCkgewogICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb250YWluaW5nICo+ICgKICAgICAgICAgICAgICAgIHRoaXMgLSBvZmZzZXRvZiAoQ29udGFpbmluZywgaW5uZXIpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGludCB5OwogICAgfSBpbm5lcjsKfTsKCgppbnQgbWFpbiAoKSB7CiAgICBDb250YWluaW5nIGM7CiAgICBzdGQ6OmNvdXQKICAgICAgICA8PCAoYy5pbm5lci5nZXRfY29udGFpbmluZyAoKSA9PSAmYyA/ICJzdWNjZXNzIiA6ICJmYWlsIikKICAgICAgICA8PCBzdGQ6OmVuZGw7Cn0=