出于好奇,我正在尝试使用该技巧的is_class构造的替代实现。sizeof()
以下是代码:
template<typename T>
struct is_class
{
typedef char (&yes)[7];
typedef char (&no)[3];
static yes check (int T::*);
static no check (...);
enum { value = (sizeof(check(0)) == sizeof(yes)) };
};
问题是当我实例化时is_class<int>
,它给出了编译错误:
error: creating pointer to member of non-class type ‘int’
现在,我的问题是,如果int T::*
不适用于(int
或等),那么void*
为什么. 编译器不应该选择?yes check
no check