The following link provides the 4 forms of reference collapsing (if I'm correct that these are the only 4 forms): <http://thbecker.net/articles/rvalue_references/section_08.html>.

From the link:

> 
> 1. A& & becomes A&
> 2. A& && becomes A&
> 3. A&& & becomes A&
> 4. A&& && becomes A&&
> 
> 
> 

Although I can make an educated guess, I would like a concise explanation for the rationale behind each of these reference-collapsing rules.

A related question, if I might: Are these reference-collapsing rules utilized **in C++11** internally by such STL utilities such as `std::move()`, `std::forward()`, and the like, in typical real-world use cases? (Note: I'm specifically asking whether the reference-collapsing rules are utilized in C++11, as opposed to C++03 or earlier.)

I ask this related question because I am aware of such C++11 utilities as `std::remove_reference`, but I do not know if the reference-related utilities such as `std::remove_reference` are routinely used in C++11 to *avoid need for* the reference-collapsing rules, or whether they are used *in conjunction with* the reference-collapsing rules.