C ++ 98/03 referencia de colapso y calificadores de cv
El código siguiente compila (gcc 4.7.2 o icc 13) y produce una salida "1 2". Lo que significa queconst
se ha caído el calificador, i. mi.,f<int&>
tiene el tipo de parámetroint&
.
¿Por que sucede? Según entiendo, de acuerdo con §14.3.1.4:
Si una plantilla-argumento para una plantilla-parámetroT
nombra un tipo “referencia acv1 S
", Un intento de crear el tipo" referencia acv2 T
”Crea el tipo“ referencia acv12 S
", dóndecv12 es la union de los calificadores cvcv1 ycv2. Se ignoran los cali fi cadores redundantes de CV.
const
No debe dejarse caer. Aquí está el 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;
}