24template <
class Value,
class T>
25concept HasParse =
requires(
const Value& value) { Parse(value,
parse::To<T>{}); };
27template <
class Value,
class T>
28concept HasSerialize =
requires(
const T& x) { Serialize(x,
serialize::To<Value>{}); };
30template <
class Value,
class T>
31concept HasConvert =
requires(
const Value& value) { Convert(value,
parse::To<T>{}); };
38concept kIsFormatValue =
requires {
typename Value::ParseException; };
46template <
typename Value,
typename T>
47using ParseType =
decltype(Parse(std::declval<Value>(),
parse::To<T>()));