#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;
}