#include <iostream>
class Foo {
public:
double m_foo;
Foo(double foo) : m_foo(foo) {}
Foo add(Foo f) { f.m_foo += m_foo; return f; } // returns temporary!
};
class Bar {
public:
Foo m_foo1;
Foo m_foo2;
Foo m_foo3;
Bar(const Foo &foo1, const Foo &foo2);
};
Bar::Bar(const Foo &foo1, const Foo &foo2)
: m_foo1(foo1)
, m_foo2(foo2)
, m_foo3(m_foo1.add(m_foo2))
{
}
int main() {
Foo foo1(20.0);
Foo foo2(22.0);
Bar bar(foo1, foo2);
std::cout << bar.m_foo3.m_foo << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgRm9vIHsKICBwdWJsaWM6CiAgICBkb3VibGUgbV9mb287CiAgICBGb28oZG91YmxlIGZvbykgOiBtX2Zvbyhmb28pIHt9CiAgICBGb28gYWRkKEZvbyBmKSB7IGYubV9mb28gKz0gbV9mb287IHJldHVybiBmOyB9IC8vIHJldHVybnMgdGVtcG9yYXJ5IQp9OwoKY2xhc3MgQmFyIHsKICBwdWJsaWM6CiAgICBGb28gbV9mb28xOwogICAgRm9vIG1fZm9vMjsKICAgIEZvbyBtX2ZvbzM7CiAgICBCYXIoY29uc3QgRm9vICZmb28xLCBjb25zdCBGb28gJmZvbzIpOyAgCn07CgpCYXI6OkJhcihjb25zdCBGb28gJmZvbzEsIGNvbnN0IEZvbyAmZm9vMikKCTogbV9mb28xKGZvbzEpCgksIG1fZm9vMihmb28yKQoJLCBtX2ZvbzMobV9mb28xLmFkZChtX2ZvbzIpKQp7Cn0KCmludCBtYWluKCkgewoJRm9vIGZvbzEoMjAuMCk7CglGb28gZm9vMigyMi4wKTsKCUJhciBiYXIoZm9vMSwgZm9vMik7CgkKCXN0ZDo6Y291dCA8PCBiYXIubV9mb28zLm1fZm9vIDw8ICJcbiI7CgoJcmV0dXJuIDA7Cn0=