Por que a const em um const T & parâmetro desaparece quando T é um tipo de referência? [duplicado
Esta pergunta já tem uma resposta aqui:
Referência em colapso? 2 respostasO código a seguir mostra que, se um modelo fazendo uma ref-to-const
é instanciado com um tipo de referência (por exemplo,int&
), o parâmetro não éconst
:
#include <iostream>
template<typename T>
void f(const T& arg) // arg isn't const if T is a reference type
{
arg = -1;
}
int main()
{
int x = 0;
f<int&>(x); // instantiate f with reference type
std::cout << x << '\n'; // prints -1 under gcc, clang, and msvc
}
Oque esta acontecendo aqui
Meu palpite é que o tipo inicial dearg
éint & const &
e isso de alguma forma se transforma emint&
. Se é assim, exatamente como isso acontece, em termos de padrão? Se não é isso que está acontecendo, o que é?