From 51ff807a11e92e248a0df784b3123faec2e4e346 Mon Sep 17 00:00:00 2001 From: Avi Kivity Date: Mon, 23 Feb 2015 17:26:10 +0200 Subject: [PATCH] sstring: fix to_sstring() for all sstring types sstring is a family of types (basic_string<...>), make to_sstring work for all of them. --- core/sstring.hh | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) 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