diff --git a/common/mysql_stmt.cpp b/common/mysql_stmt.cpp index 0c71aa53c..872df0086 100644 --- a/common/mysql_stmt.cpp +++ b/common/mysql_stmt.cpp @@ -414,6 +414,12 @@ static uint64_t MakeBits(std::span data) return bits; } +template +concept has_from_chars = requires (const char* first, const char* last, T value) +{ + std::from_chars(first, last, value); +}; + template static T FromString(std::string_view sv) { @@ -422,6 +428,14 @@ static T FromString(std::string_view sv) // return false for empty (zero-length) strings return !sv.empty(); } + else if constexpr (std::is_same_v && !has_from_chars) + { + return std::strtof(std::string(sv).c_str(), nullptr); + } + else if constexpr (std::is_same_v && !has_from_chars) + { + return std::strtod(std::string(sv).c_str(), nullptr); + } else { // non numbers return a zero initialized T (could return nullopt instead)