C ++ 98/03-Referenzzusammenbruch und Lebenslauf-Qualifizierer

Der folgende Code kompiliert (gcc 4.7.2 oder icc 13) und gibt "1 2" aus. Was bedeutet, dassconst das Qualifikationsmerkmal wird fallengelassen, ich. e.,f<int&> hat den Parametertypint&.

Warum passiert das? Soweit ich weiß, laut §14.3.1.4:

Wenn ein Template-Argument für einen Template-ParameterT benennt einen Typ "Verweis aufcv1 S", Ein Versuch, den Typ" Verweis auf "zu erstellencv2 TErstellt den Typ Verweis aufcv12 S", wohercv12 ist der Zusammenschluss der CV-Qualifikantencv1 undcv2. Redundante CV-Qualifikanten werden ignoriert.

const sollte nicht fallen gelassen werden. Hier ist der Code:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage