C ++ 98/03 свертывание ссылок и cv квалификаторы

Код ниже компилируется (gcc 4.7.2 или icc 13) и выдает «1 2» вывод. Что обозначаетconst квалификатор отброшен, т.е. е.,f<int&> имеет тип параметраint&.

Почему это происходит? Как я понимаю, согласно §14.3.1.4:

Если шаблон-аргумент для шаблона-параметраT называет тип «ссылка наCV1 S»Попытка создать тип« ссылка наCV2 TСоздает тип «ссылка наCV12 S", гдеCV12 это объединение cv-квалификаторовCV1 а такжеCV2, Избыточные cv-квалификаторы игнорируются.

const не должен быть уронен. Вот код:

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

Ответы на вопрос(2)

Ваш ответ на вопрос