24template <
typename Value,
typename T>
25using HasParse =
decltype(Parse(std::declval<
const Value&>(),
parse::To<T>{}));
27template <
typename Value,
typename T>
28using HasSerialize =
decltype(Serialize(std::declval<
const T&>(),
serialize::To<Value>{}));
30template <
typename Value,
typename T>
31using HasConvert =
decltype(Convert(std::declval<
const Value&>(),
parse::To<T>{}));
33template <
typename Value>
34using IsFormatValue =
typename Value::ParseException;
36template <
class Value,
class T>
37constexpr inline bool kHasParse = meta::IsDetected<HasParse, Value, T>;
39template <
class Value,
class T>
40constexpr inline bool kHasSerialize = meta::IsDetected<HasSerialize, Value, T>;
42template <
class Value,
class T>
43constexpr inline bool kHasConvert = meta::IsDetected<HasConvert, Value, T>;
58template <
typename Value,
typename T>
59using ParseType =
decltype(Parse(std::declval<Value>(),
parse::To<T>()));