This patch simplifies traits defined in utils. Due to the simplicity, this potentially improves compilation performance.
CanConvertFromStringStream:
Use SFINAE.
If the std::declval<std::stringstream &>() >> std::declval<T &>() expression is invalid, this specialization will be discarded and fall back to the false_type case.
CanConvertToString:
Likewise.
We don't need remove_cvref since std::to_string does not require cv-qualifiers or a ref-qualifier.
CanConstructFromString:
This is equivalent to std::is_constructible<T, std::string>
CanConvertFromString:
This is equivalent to std::is_assignable<T &, std::string>
This patch simplifies traits defined in utils. Due to the simplicity, this potentially improves compilation performance.
std::declval<std::stringstream &>() >> std::declval<T &>()
expression is invalid, this specialization will be discarded and fall back to the false_type case.std::is_constructible<T, std::string>
std::is_assignable<T &, std::string>