#include <iostream>
using namespace std;
template <typename T> class A{
public:
void test() { cout << "normal" << endl;}
};
//template <typename T> class A<T&>{
//public:
// void test() { cout << "&" << endl;}
//};
template <typename T> class A<T&&>{
public:
void test() { cout << "&&" << endl;}
};
int main(){
A<int&> a;
a.test();
}
输出为normal
,表明选择了普通(非专业)模板。这可能看起来很明显,因为int &
作为模板参数提供,唯一可用的特化是采用右值引用的。但是,为什么选择T = int&
无法选择第二个模板专精化,在这种情况下参考折叠会导致T&&
成为int&
?