Foo product();
Foo consume(Foo foo);
Foo foo; // 이동생성자 구현했다 침
consume(foo); // lvalue라 copy
consume(std:move(foo)); // xvalue라 move
위에는 이전과 동일한데
consume(Foo{});
consume(product());
위처럼 prvalue인 경우에 예전에는 copy elision하거나 move였다면
C++17에서는 copy elision하라고 규정되어있더라
https://en.cppreference.com/w/cpp/language/copy_elision
안심하고 남발해도 되겠군
Guaranteed copy ellision 이라고 합니다