部分专业化中的模板参数推导

时间:2015-12-23 01:37:08

标签: c++ templates c++11 specialization

#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&

0 个答案:

没有答案