1 #ifndef OSMIUM_UTIL_MISC_HPP
2 #define OSMIUM_UTIL_MISC_HPP
42 #include <type_traits>
50 template <
typename... Ts>
51 inline std::tuple<
const Ts&...>
53 return std::tuple<
const Ts&...>(args...);
69 template <
typename TReturn>
70 inline TReturn str_to_int(
const char* str) {
71 using r_type =
typename std::conditional<std::is_unsigned<TReturn>::value,
unsigned long long,
long long>
::type;
74 const auto value = std::strtoll(str, &
end, 10);
75 if (value < 0 || value == std::numeric_limits<long long>::max() ||
static_cast<r_type
>(value) >= std::numeric_limits<TReturn>::max() ||
end ==
nullptr || *
end !=
'\0') {
79 return static_cast<TReturn
>(value);
86 #endif // OSMIUM_UTIL_MISC_HPP