#include <iostream>
#include <vector>
// Foo adds an element to a std::vector passed by reference
// on construction in the destructor
struct Foo {
Foo(std::vector<double>& v) : m_v(v){
}
~Foo(){
m_v.push_back(1.0);
}
std::vector<double>& m_v;
};
std::vector<double> bar(){
std::vector<double> ret;
Foo foo(ret);
return ret;
}
int main(){
std::cout << bar().size() << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKLy8gRm9vIGFkZHMgYW4gZWxlbWVudCB0byBhIHN0ZDo6dmVjdG9yIHBhc3NlZCBieSByZWZlcmVuY2UKLy8gb24gY29uc3RydWN0aW9uIGluIHRoZSBkZXN0cnVjdG9yCnN0cnVjdCBGb28gewogICAgRm9vKHN0ZDo6dmVjdG9yPGRvdWJsZT4mIHYpIDogbV92KHYpewogICAgfQogICAgfkZvbygpewogICAgICAgIG1fdi5wdXNoX2JhY2soMS4wKTsKICAgIH0KICAgIHN0ZDo6dmVjdG9yPGRvdWJsZT4mIG1fdjsKfTsKCnN0ZDo6dmVjdG9yPGRvdWJsZT4gYmFyKCl7CiAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHJldDsKICAgIEZvbyBmb28ocmV0KTsKICAgIHJldHVybiByZXQ7Cn0KCmludCBtYWluKCl7CiAgICBzdGQ6OmNvdXQgPDwgYmFyKCkuc2l6ZSgpIDw8ICJcbiI7Cn0=