#include <iostream>
class Foo
{
public:
Foo() = default;
Foo(const Foo&)
{
std::cout << "Look mom, I am being copied!" << std::endl;
}
Foo(Foo&&)
{
std::cout << "Look mom, I am being moved!" << std::endl;
}
};
void bar(Foo f) {}
int main() {
Foo f;
bar(f); // Copied
bar(std::move(f)); // Moved
bar(Foo{}); // Elided
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgRm9vCnsKcHVibGljOgoJRm9vKCkgPSBkZWZhdWx0OwoJRm9vKGNvbnN0IEZvbyYpCgl7CgkJc3RkOjpjb3V0IDw8ICJMb29rIG1vbSwgSSBhbSBiZWluZyBjb3BpZWQhIiA8PCBzdGQ6OmVuZGw7Cgl9CglGb28oRm9vJiYpCgl7CgkJc3RkOjpjb3V0IDw8ICJMb29rIG1vbSwgSSBhbSBiZWluZyBtb3ZlZCEiIDw8IHN0ZDo6ZW5kbDsKCX0KfTsKCnZvaWQgYmFyKEZvbyBmKSB7fQoKaW50IG1haW4oKSB7CglGb28gZjsKCWJhcihmKTsgLy8gQ29waWVkCgliYXIoc3RkOjptb3ZlKGYpKTsgLy8gTW92ZWQKCWJhcihGb297fSk7IC8vIEVsaWRlZAoJcmV0dXJuIDA7Cn0=