23template <
class Value,
class T>
24concept HasParse =
requires(
const Value& value) { Parse(value,
parse::To<T>{}); };
26template <
class Value,
class T>
27concept HasSerialize =
requires(
const T& x) { Serialize(x,
serialize::To<Value>{}); };
29template <
class Value,
class T>
30concept HasConvert =
requires(
const Value& value) { Convert(value,
parse::To<T>{}); };
37concept IsFormatValue =
requires {
typename Value::ParseException; };
41concept kIsFormatValue = IsFormatValue<Value>;
49template <
typename Value,
typename T>
50using ParseType =
decltype(Parse(std::declval<Value>(),
parse::To<T>()));