Return Value Optimization and Copy Elision in C++