#include <iostream>
#include <cassert>
#include <memory>
#include <string>
using namespace std;
class Thing {
string name;
public:
Thing(): name() {
// nop
}
void setName(const string name) {
this->name = name;
}
const string getName() {
return this->name;
}
};
void Foo(shared_ptr<Thing> one, shared_ptr<Thing> two)
{
one->setName("foo");
}
void Test()
{
shared_ptr<Thing> one(new Thing());
shared_ptr<Thing> two(new Thing());
Foo(one, two);
assert(one->getName() == "foo");
}
int main() {
Test();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2Fzc2VydD4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPHN0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBUaGluZyB7CglzdHJpbmcgbmFtZTsKCQoJcHVibGljOiAKCQoJVGhpbmcoKTogbmFtZSgpIHsKCQkvLyBub3AKCX0KCQoJdm9pZCBzZXROYW1lKGNvbnN0IHN0cmluZyBuYW1lKSB7CgkJdGhpcy0+bmFtZSA9IG5hbWU7Cgl9CgkKCWNvbnN0IHN0cmluZyBnZXROYW1lKCkgewoJCXJldHVybiB0aGlzLT5uYW1lOwoJfQp9OwoKdm9pZCBGb28oc2hhcmVkX3B0cjxUaGluZz4gb25lLCBzaGFyZWRfcHRyPFRoaW5nPiB0d28pCnsKCW9uZS0+c2V0TmFtZSgiZm9vIik7Cn0KCnZvaWQgVGVzdCgpCnsKCXNoYXJlZF9wdHI8VGhpbmc+IG9uZShuZXcgVGhpbmcoKSk7CglzaGFyZWRfcHRyPFRoaW5nPiB0d28obmV3IFRoaW5nKCkpOwoJRm9vKG9uZSwgdHdvKTsKCQoJYXNzZXJ0KG9uZS0+Z2V0TmFtZSgpID09ICJmb28iKTsKfQoKaW50IG1haW4oKSB7CglUZXN0KCk7CgkKCXJldHVybiAwOwp9