Last Updated: June 6, 2026
The previous lesson introduced move semantics as a way to transfer contents instead of copying them. This chapter covers the language machinery that makes that work: the T&& syntax called an rvalue reference, the three value categories the compiler tracks for every expression, and the overload resolution rules that decide which constructor or assignment the code actually calls. It also revisits std::move and shows it is not a special operation, but a one-line static_cast. Forwarding references look identical (T&&) but only appear in deduced contexts and behave differently, which is the job of a later lesson.