#include <string>
#include <iostream>
class A
{
public:
A(std::string& s) : s_(s)
{ std::cout << "A::ctor" << std::endl; }
A(const A& rhs) : s_(rhs.s_)
{ std::cout << "A::copy" << std::endl; }
~A()
{ std::cout << "A::dtor" << std::endl; }
A& operator=(const A& rhs)
{ std::cout << "A::copyassign" << std::endl; }
private:
std::string& s_;
};
std::string s("hello world");
int main()
{
A a(s); // a.s_ references the global s.
A b(a); // b.s_ references the a.s_ that references the global s.
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQQp7CnB1YmxpYzoKCUEoc3RkOjpzdHJpbmcmIHMpIDogc18ocykKCXsgc3RkOjpjb3V0IDw8ICJBOjpjdG9yIiA8PCBzdGQ6OmVuZGw7IH0KCglBKGNvbnN0IEEmIHJocykgOiBzXyhyaHMuc18pCgl7IHN0ZDo6Y291dCA8PCAiQTo6Y29weSIgPDwgc3RkOjplbmRsOyB9CgoJfkEoKQoJeyBzdGQ6OmNvdXQgPDwgIkE6OmR0b3IiIDw8IHN0ZDo6ZW5kbDsgfQoKCUEmIG9wZXJhdG9yPShjb25zdCBBJiByaHMpCgl7IHN0ZDo6Y291dCA8PCAiQTo6Y29weWFzc2lnbiIgPDwgc3RkOjplbmRsOyB9Cgpwcml2YXRlOgoJc3RkOjpzdHJpbmcmIHNfOyAgICAKfTsKCnN0ZDo6c3RyaW5nIHMoImhlbGxvIHdvcmxkIik7CgppbnQgbWFpbigpCnsKCUEgYShzKTsgICAgLy8gYS5zXyByZWZlcmVuY2VzIHRoZSBnbG9iYWwgcy4KCUEgYihhKTsgICAgLy8gYi5zXyByZWZlcmVuY2VzIHRoZSBhLnNfIHRoYXQgcmVmZXJlbmNlcyB0aGUgZ2xvYmFsIHMuCgoJcmV0dXJuIDA7Cn0=