#include <iostream>

struct Bar {
	Bar() { std::cout << "create\n"; }
	Bar(Bar const&) { std::cout << "copy\n"; }
	Bar(Bar&&) { std::cout << "move\n"; }
	~Bar() { std::cout << "destroy\n"; }
};

void fooA(Bar const& bar) {
	Bar bar_cpy(bar);
}

void fooB(Bar bar) {
}

int main() {
	::std::cout << "by-reference then copy\n";
	fooA(Bar());
	
	::std::cout << "\nby-value\n";
	fooB(Bar());
}