C++ · Avançado · Inglês · Técnico
reference collapsing
Regra que reduz referências a referências, formadas por templates ou aliases, a uma só: apenas && com && vira &&; qualquer combinação com & vira &.
Onde usar
É a razão pela qual a forwarding reference funciona: com um lvalue, T = U& e T&& colapsa para U&. Aparece ao ler mensagens de erro de templates e ao implementar std::forward.
Em código
using R = int&;
using A = R&&; // colapsa para int&
static_assert(std::is_same_v<A, int&>);
using B = std::add_rvalue_reference_t<R>;
static_assert(std::is_same_v<B, int&>);Exemplos
Thanks to reference collapsing, T becomes int ref when you pass an lvalue.
Graças ao reference collapsing, T vira int& quando você passa um lvalue.
The error message only makes sense once you know reference collapsing.
A mensagem de erro só faz sentido quando você conhece reference collapsing.
Cuidado
Não dá para declarar uma referência a referência diretamente; o colapso só ocorre via template, using ou decltype.
Sinônimos
colapso de referências