#include <iostream>
#include <memory>
#include <functional>
struct S
{
void operator =(int y)
{ x = 5; }
operator int*()
{
return &x;
}
int x;
};
std::ostream& operator <<(std::ostream& out, S const& s)
{
return out << s.x;
}
int main()
{
S s;
auto x = std::make_shared<S>(std::ref(s));
*x = 10;
std::cout << *x;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnN0cnVjdCBTCnsKICAgIHZvaWQgb3BlcmF0b3IgPShpbnQgeSkKICAgIHsgeCA9IDU7IH0KCiAgICBvcGVyYXRvciBpbnQqKCkKICAgIHsKICAgICAgICByZXR1cm4gJng7CiAgICB9CgogICAgaW50IHg7Cn07CgpzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBTIGNvbnN0JiBzKQp7CiAgICByZXR1cm4gb3V0IDw8IHMueDsKfQoKaW50IG1haW4oKQp7CiAgICBTIHM7CiAgICBhdXRvIHggPSBzdGQ6Om1ha2Vfc2hhcmVkPFM+KHN0ZDo6cmVmKHMpKTsKICAgICp4ID0gMTA7CgogICAgc3RkOjpjb3V0IDw8ICp4Owp9