#include <iostream>

class Test
{
public:

	Test()
		{ std::cout << "Test::Test()" << std::endl; }

	Test (const Test& rhs)
		{ std::cout << "Test::Test (const Test&)" << std::endl; }

	Test (Test&& rhs)
		{ std::cout << "Test::Test (Test&&)" << std::endl; }

	Test& operator= (const Test& rhs)
		{ std::cout << "Test::operator= (const Test&)" << std::endl; return *this; }

	Test& operator= (Test&& rhs)
		{ std::cout << "Test::operator= (Test&&)" << std::endl; return *this; }
};

Test immediate_return()
{
	return Test();
}

Test local_variable()
{
	Test local;
	return local;
}

Test local_variable_and_assignment()
{
	Test local = Test();
	return local;
}

int main()
{
	Test a;
	Test b = Test();
	Test c = immediate_return();
	Test d = local_variable();
	Test e = local_variable_and_assignment();
	return 0;
}