#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;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKc3RydWN0IENCeXRlQXJyYXkge307CnN0cnVjdCBITFZhcmlhbnQgewoJSExWYXJpYW50KCkge30KCUhMVmFyaWFudChjb25zdCBITFZhcmlhbnQmKSB7fQoJSExWYXJpYW50KGNvbnN0IENCeXRlQXJyYXkmKSB7fQoJCgl9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmlubGluZSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19wb2Q8VD46OnZhbHVlLCBDQnl0ZUFycmF5Pjo6dHlwZSBzZXJpYWxpemUoY29uc3QgVCYgdmFsdWUpCnsKCXJldHVybiBzZXJpYWxpemUoSExWYXJpYW50KHZhbHVlKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19wb2Q8VD46OnZhbHVlLCBDQnl0ZUFycmF5Pjo6dHlwZSBzZXJpYWxpemUoY29uc3QgVCYgdmFsdWUpCnsKCXJldHVybiBDQnl0ZUFycmF5KCk7Cn0KCnRlbXBsYXRlIDw+CmlubGluZSBDQnl0ZUFycmF5IHNlcmlhbGl6ZShjb25zdCBITFZhcmlhbnQmIHZhbHVlKQp7CglyZXR1cm4gQ0J5dGVBcnJheSgpOwp9CgppbnQgbWFpbigpCnsKCXNlcmlhbGl6ZSgwKTsKCXNlcmlhbGl6ZShDQnl0ZUFycmF5KCkpOwoJc2VyaWFsaXplKEhMVmFyaWFudCgpKTsKCQoJcmV0dXJuIDA7Cn0=