Explicación concisa de las reglas de colapso de referencia solicitadas: (1) A & & -> A &, (2) A & && -> A &, (3) A && & - - A &, y (4) A && && -> A &&

El siguiente enlace proporciona las 4 formas de colapso de referencia (si estoy en lo cierto, estas son las únicas 4 formas):http://thbecker.net/articles/rvalue_references/section_08.html.

Desde el enlace:

A & & se convierte en A &A & && se convierte en A &A && & se convierte en A &A && && se convierte en A &&

Aunque puedo hacer una suposición educada, me gustaría una explicación concisa de la razón detrás de cada una de estas reglas de colapso de referencia.

Una pregunta relacionada, si pudiera: ¿Se utilizan estas reglas de colapso de referencia?en C ++ 11 internamente por tales utilidades STL tales comostd::move(), std::forward(), y similares, en casos típicos de uso en el mundo real? (Nota: estoy preguntando específicamente si las reglas de colapso de referencia se utilizan en C ++ 11, a diferencia de C ++ 03 o anterior).

Hago esta pregunta relacionada porque soy consciente de tales utilidades de C ++ 11 comostd::remove_reference, pero no sé si las utilidades relacionadas con la referencia, tales comostd::remove_reference se utilizan habitualmente en C ++ 11 paraevitar la necesidad de las reglas de colapso de referencia, o si se usanen conjunción con Las reglas de colapso de referencia.

Respuestas a la pregunta(2)

Su respuesta a la pregunta