#include <iostream>
#include <vector>
#include <memory>
using XS = std::vector<std::shared_ptr<int>>;
void foo(XS const& xs) {
for (auto& x : xs) {
*x = 42;
}
}
void print(XS const& xs) {
std::cout << "<XS>\n";
for (auto const& x : xs) {
std::cout << "\t" << *x << "\n";
}
std::cout << "</XS>\n";
}
int main(int, char**) {
XS xs;
for (auto i : { 1, 2, 3}) {
xs.push_back(std::make_shared<int>(i));
}
std::cout << "before:\n";
print(xs);
foo(xs);
std::cout << "after:\n";
print(xs);
return 0;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1lbW9yeT4KCnVzaW5nIFhTID0gc3RkOjp2ZWN0b3I8c3RkOjpzaGFyZWRfcHRyPGludD4+OwoKdm9pZCBmb28oWFMgY29uc3QmIHhzKSB7CiAgICBmb3IgKGF1dG8mIHggOiB4cykgewogICAgICAgICp4ID0gNDI7CiAgICB9Cn0KCnZvaWQgcHJpbnQoWFMgY29uc3QmIHhzKSB7CiAgICBzdGQ6OmNvdXQgPDwgIjxYUz5cbiI7CiAgICBmb3IgKGF1dG8gY29uc3QmIHggOiB4cykgewogICAgICAgIHN0ZDo6Y291dCA8PCAiXHQiIDw8ICp4IDw8ICJcbiI7CiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgIjwvWFM+XG4iOwp9CgppbnQgbWFpbihpbnQsIGNoYXIqKikgewogICAgWFMgeHM7CiAgICBmb3IgKGF1dG8gaSA6IHsgMSwgMiwgM30pIHsKICAgICAgICB4cy5wdXNoX2JhY2soc3RkOjptYWtlX3NoYXJlZDxpbnQ+KGkpKTsKICAgIH0KCiAgICBzdGQ6OmNvdXQgPDwgImJlZm9yZTpcbiI7CiAgICBwcmludCh4cyk7CiAgICBmb28oeHMpOwogICAgc3RkOjpjb3V0IDw8ICJhZnRlcjpcbiI7CiAgICBwcmludCh4cyk7CgogICAgcmV0dXJuIDA7Cn0KCg==