Следният код
#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;
}
задейства грешка при компилиране C2794: 'type' : is not a member of any direct or indirect base class of 'std::enable_if<false,CByteArray>'
в MSVC 2013. Тя обаче работи в ideone: въведете описание на връзката тук
Каква е грешката тук?
Грешката е същата в MSVC 2010, 2012 и 2013.
serialize
, което би улеснило да разберете какво се обърка. Ако изтриетеserialize
, които нямат грешката, ще продължи ли да генерира грешката? Ако е така, редактирайте публикацията си с по-простия код. - person Yakk - Adam Nevraumont   schedule 03.11.2014template<>
може да е замесен в проблема, което може да е страничен ефект от това как MSVC прави пълна специализация. Кой ред е ред 27? - person Yakk - Adam Nevraumont   schedule 03.11.2014template <> CByteArray serialize(const HLVariant& value)
тяло. Каквото и да означава това. - person Violet Giraffe   schedule 03.11.2014serialize
повиквания, грешката остава. - person Violet Giraffe   schedule 03.11.2014<> serialize (const int&)
специализация, той се опитва да замениint
в двете базови версии на шаблона и тъй като една от тях винаги е скрита - компилирането на 1 от bae функциите винаги ще се провали, независимо от типа, след като среща на компилатораenable_if<false, T>
. Грешка в компилатора? - person Violet Giraffe   schedule 03.11.2014serialize
в шаблон на клас и да специализирам този шаблон? Какво ще кажете за специализиране на шаблонен метод на нешаблонен клас? - person Violet Giraffe   schedule 03.11.2014