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;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta