diff --git a/core/sstring.hh b/core/sstring.hh index e68e35b4c5..f888b8eea6 100644 --- a/core/sstring.hh +++ b/core/sstring.hh @@ -338,66 +338,74 @@ static String make_sstring(Args&&... args) template String to_sstring(T value, for_enable_if); -template +template inline -sstring to_sstring_sprintf(T value, const char* fmt) { +string_type to_sstring_sprintf(T value, const char* fmt) { char tmp[sizeof(value) * 3 + 3]; auto len = std::sprintf(tmp, fmt, value); - return sstring(tmp, len); + using char_type = typename string_type::value_type; + return string_type(reinterpret_cast(tmp), len); +} + +template +inline +sstring +to_sstring_sprintf(T value, const char* fmt) { + return to_sstring_sprintf(value, fmt); } template inline string_type to_sstring(int value, void* = nullptr) { - return to_sstring_sprintf(value, "%d"); + return to_sstring_sprintf(value, "%d"); } template inline string_type to_sstring(unsigned value, void* = nullptr) { - return to_sstring_sprintf(value, "%u"); + return to_sstring_sprintf(value, "%u"); } template inline string_type to_sstring(long value, void* = nullptr) { - return to_sstring_sprintf(value, "%ld"); + return to_sstring_sprintf(value, "%ld"); } template inline string_type to_sstring(unsigned long value, void* = nullptr) { - return to_sstring_sprintf(value, "%lu"); + return to_sstring_sprintf(value, "%lu"); } template inline string_type to_sstring(long long value, void* = nullptr) { - return to_sstring_sprintf(value, "%lld"); + return to_sstring_sprintf(value, "%lld"); } template inline string_type to_sstring(unsigned long long value, void* = nullptr) { - return to_sstring_sprintf(value, "%llu"); + return to_sstring_sprintf(value, "%llu"); } template inline string_type to_sstring(float value, void* = nullptr) { - return to_sstring_sprintf(value, "%f"); + return to_sstring_sprintf(value, "%f"); } template inline string_type to_sstring(double value, void* = nullptr) { - return to_sstring_sprintf(value, "%f"); + return to_sstring_sprintf(value, "%f"); } template inline string_type to_sstring(long double value, void* = nullptr) { - return to_sstring_sprintf(value, "%Lf"); + return to_sstring_sprintf(value, "%Lf"); } template