2
錯誤的性質不同於this thread中提到的錯誤。
我想在VC++環境中實現一個SFINAE方式,它會發現一個類是否包含成員(方法)。VC++ SFINAE給出錯誤C2070:'overloaded-function':非法sizeof操作數
下面是一個簡單的代碼:
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++ environment中也能正常工作。
但是在馬車VC++編譯器錯誤相同的結果:
錯誤C2070:「重載功能」:非法的sizeof操作
我嘗試過其他解決方法SFINAE使用decltype
,但沒有運氣。有沒有解決這個問題的更好的解決方法?
[MSDN說](http://msdn.microsoft.com /en-us/library/hh567368.aspx)即使在VS2013中它們也不支持「Expression SFINAE」 – dyp
你使用的是哪個版本的VC? – Jarod42
@ Jarod42,它在VS2010/12中不起作用。錯誤。Dyp,使用C++ 11的任何替代方法? – iammilind