#include <functional>
#include <string>
#include <iostream>
struct Guy ;
struct Girl
{
Girl( Guy& g ) : boyfriend(g) {}
std::reference_wrapper<Guy> boyfriend ;
};
struct Guy
{
const std::string name ;
// ...
};
int main()
{
Guy a { "a" };
Girl b(a) ;
std::cout << b.boyfriend.get().name << '\n' ;
Guy c { "c" } ;
b.boyfriend = c ;
std::cout << b.boyfriend.get().name << '\n' ;
Guy no_one { "no one" };
b.boyfriend = no_one ;
std::cout << b.boyfriend.get().name << '\n' ;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnN0cnVjdCBHdXkgOwoKc3RydWN0IEdpcmwKewogICAgR2lybCggR3V5JiBnICkgOiBib3lmcmllbmQoZykge30KICAgIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8R3V5PiBib3lmcmllbmQgOwp9OwoKc3RydWN0IEd1eQp7CiAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lIDsKICAvLyAuLi4KfTsKCmludCBtYWluKCkKewogICAgR3V5IGEgeyAiYSIgfTsKCiAgICBHaXJsIGIoYSkgOwogICAgc3RkOjpjb3V0IDw8IGIuYm95ZnJpZW5kLmdldCgpLm5hbWUgPDwgJ1xuJyA7CgogICAgR3V5IGMgeyAiYyIgfSA7CiAgICBiLmJveWZyaWVuZCA9IGMgOwogICAgc3RkOjpjb3V0IDw8IGIuYm95ZnJpZW5kLmdldCgpLm5hbWUgPDwgJ1xuJyA7CgogICAgR3V5IG5vX29uZSB7ICJubyBvbmUiIH07CiAgICBiLmJveWZyaWVuZCA9IG5vX29uZSA7CiAgICBzdGQ6OmNvdXQgPDwgYi5ib3lmcmllbmQuZ2V0KCkubmFtZSA8PCAnXG4nIDsKfQo=