这是代码
#include <iostream>
template<typename T>
class IsReference {
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename C> static One test(C*);
template<typename C> static Two test(...);
public:
enum { val = sizeof(IsReference<T>::test<T>(0)) == 1 };
enum {result = !val};
};
template < class T>
void foo(T t){
std::cout<< IsReference<T>::result << "\n";
}
class C{
public: int a;
};
int main(){
C c1;
C &c2 = c1;
foo(c1);
foo(c2);
}
输出0
也是foo(c2)
我不想要的。
在里面foo
如何检查是否T
是引用类型?我不想调用foo
,foo<C&>(c2)
即我们不知道函数在哪种类型上被实例化。