ExpertiDict

C++ · Avançado · Inglês · Técnico

reference collapsing

ˈrɛfɹəns kəˈlæpsɪŋsubstantivo

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

Veja também

Todos os termos de C++