#include <iostream>

class Foo
{
private:
	int m_data;
	
public:
	Foo() : m_data(42)
	{
		std::cout << "Foo constructor\n";	
	}
	
	Foo(const Foo& other)
	{
		std::cout << "Foo copy constructor\n";
		m_data = other.m_data;
	}
	
	~Foo()
	{
		std::cout << "Foo destructor\n";
	}
};

class Bar
{
	Foo m_foo;
public:
	Bar(const Foo& foo)
	: m_foo(foo)
	{
		std::cout << "Bar constructor\n";
	}
	
	~Bar()
	{
		std::cout << "Bar destructor\n";
	}
};

int main()
{
	Foo myFoo;
	Bar bar(myFoo);
	
	std::cout << " :: End of program scope :: \n";
}