This document discusses C++ rvalue references and move semantics. It begins with an overview and definitions of lvalues and rvalues from C and how they evolved in C++11. It then covers value categories like prvalues and xvalues introduced in C++11. The document explains how rvalue references allow objects to be moved instead of copied by extending their lifetime. It also discusses how classes can implement move semantics by adding move constructors and assignment operators. The document notes many ways C++ and the standard library support move semantics, like optimized containers, algorithms, traits and perfect forwarding. It ends with some examples of how to incorrectly use rvalue references and move semantics.