다음 코드를는 SFINAE을 악용하기 - 컴파일 오류
#include <type_traits>
struct CByteArray {};
struct HLVariant {
HLVariant() {}
HLVariant(const HLVariant&) {}
HLVariant(const CByteArray&) {}
};
template <typename T>
inline typename std::enable_if<!std::is_pod<T>::value, CByteArray>::type serialize(const T& value)
{
return serialize(HLVariant(value));
}
template <typename T>
inline typename std::enable_if<std::is_pod<T>::value, CByteArray>::type serialize(const T& value)
{
return CByteArray();
}
template <>
inline CByteArray serialize(const HLVariant& value)
{
return CByteArray();
}
int main()
{
serialize(0);
serialize(CByteArray());
serialize(HLVariant());
return 0;
}
그것은 않습니다, 그러나, ideone에서 작업 MSVC 2013 년 컴파일 오류 C2794: 'type' : is not a member of any direct or indirect base class of 'std::enable_if<false,CByteArray>'
트리거 : enter link description here
무엇을 실수로합니까?
오류는 MSVC 2010, 2012 및 2013
나는 오류가 "MSVC 2013"인 내기 것입니다 :) – Pradhan
@Pradhan : 당신은 MS 컴파일러는 다음 GCC에 어떻게 든 열등한 것을 의미하는 경우 당신은 진실에서 더 멀어 질 수 없습니다. –
@VioletGiraffe C++ 언어 준수? MS 컴파일러는 약간 뒤쳐져 있습니다. 다른 장점이 있지만 C++ 언어 준수에 대해 스스로 괴롭히지 마십시오. MSVC 2013의 어떤 업데이트가 있습니까? – Yakk