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