C ++ 98/03 zwijanie referencji i kwalifikacje CV

Poniższy kod się kompiluje (gcc 4.7.2 lub icc 13) i generuje wyjście „1 2”. Co oznacza żeconst kwalifikator jest odrzucany, i. mi.,f<int&> ma typ parametruint&.

Dlaczego tak się dzieje? Jak rozumiem, zgodnie z §14.3.1.4:

Jeśli argument-szablon dla parametru szablonuT nazywa typ „odwołanie docv1 S”, Próba utworzenia typu„ odwołanie docv2 T”Tworzy typ„ odwołanie docv12 S", gdziecv12 jest związkiem kwalifikatorów CVcv1 icv2. Nadmiarowe kwerendy cv są ignorowane.

const nie należy upuszczać. Oto kod:

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

questionAnswers(2)

yourAnswerToTheQuestion