Last Updated: May 17, 2026
The previous lesson introduced move semantics as a way to transfer guts instead of copying them. This chapter is about 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 your code actually calls. We'll also revisit std::move and show that it's not a special operation at all, it's a one-line static_cast. Forwarding references look identical (T&&) but only appear in deduced contexts and behave very differently, which is the job of a later lesson.