C2 / 03 referência de colapso e cv qualificadores
O código abaixo compila (gcc 4.7.2 ou icc 13) e produz saída "1 2". O que significa queconst
qualificador é descartado, i. e.f<int&>
tem o tipo de parâmetroint&
.
Por que isso acontece? Pelo que entendi, de acordo com o §14.3.1.4:
Se um argumento de modelo para um parâmetro de modeloT
nomeia um tipo “referência acv1 S
”, Uma tentativa de criar o tipo“ referência acv2 T
”Cria o tipo“ referência paracv12 S
", Ondecv12 é a união dos cv-quali fi ferscv1 ecv2. Os qualificadores redundantes da cv são ignorados.
const
não deve ser descartado. Aqui está o código:
#include <iostream>
using namespace std;
template <typename T>
void f(const T& t)
{
t++;
}
int main()
{
int a = 1;
cout << a;
f<int&>(a);
cout << ' ' << a << endl;
return 0;
}