diff --git a/src/numberparsing.h b/src/numberparsing.h index f18e582..256e4b3 100644 --- a/src/numberparsing.h +++ b/src/numberparsing.h @@ -61,6 +61,22 @@ template<> inline tl::expected fromString(std:: return val; } +template<> inline tl::expected fromString(std::string_view str) +{ + int val; + if (std::sscanf(str.data(), "%" SCNi32, &val) != 1) + return tl::make_unexpected(fmt::format("invalid int {}", str)); + return val; +} + +template<> inline tl::expected fromString(std::string_view str) +{ + unsigned int val; + if (std::sscanf(str.data(), "%" SCNu32, &val) != 1) + return tl::make_unexpected(fmt::format("invalid unsigned int {}", str)); + return val; +} + template<> inline tl::expected fromString(std::string_view str) { int64_t val; diff --git a/src/refwhenneeded.h b/src/refwhenneeded.h index 77b06fc..049ed8f 100644 --- a/src/refwhenneeded.h +++ b/src/refwhenneeded.h @@ -2,6 +2,7 @@ // system includes #include +#include namespace cpputils { template struct RefWhenNeeded { using T = const X &; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; @@ -12,10 +13,10 @@ template<> struct RefWhenNeeded { using T = int16_ template<> struct RefWhenNeeded { using T = uint16_t; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded { using T = int32_t; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded { using T = uint32_t; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; +template<> struct RefWhenNeeded { using T = int; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; +template<> struct RefWhenNeeded { using T = unsigned int; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded { using T = int64_t; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded { using T = uint64_t; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; -template<> struct RefWhenNeeded { using T = long; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; -template<> struct RefWhenNeeded { using T = unsigned long; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded { using T = float; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded { using T = double; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; @@ -25,10 +26,10 @@ template<> struct RefWhenNeeded> { using T = std::o template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; +template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; +template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; -template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; -template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; }; template<> struct RefWhenNeeded> { using T = std::optional; RefWhenNeeded() = delete; ~RefWhenNeeded() = delete; };