错误的性质与此线程中提到的不同。
我正在尝试在 VC++ 环境中实现一种 SFINAE 方式,该方式查找一个类是否包含成员(方法)。
下面是一个简化的代码:
template<typename Class>
class HasMember_Method
{
typedef char (&yes)[2];
template<unsigned int> struct Exists;
template<typename V>
static yes CheckMember (Exists<sizeof(&V::Method)>*); // <--- VC++ problem
template<typename>
static char CheckMember (...);
public:
static const bool value = (sizeof(CheckMember<Class>(0)) == sizeof(yes));
};
这Method
是我们正在寻找的成员方法。即使没有 C++11 ,这段代码在g++ 环境中也能正常工作。
然而,同样会导致错误的 VC++ 编译器错误:
错误 C2070:“重载函数”:非法 sizeof 操作数
我尝试了使用 SFINAE 的其他解决方法decltype
,但没有运气。是否存在针对此问题的任何修复或更好的解决方法?