diff --git a/include/spdlog/common.h b/include/spdlog/common.h index 49625c0b..35941aff 100644 --- a/include/spdlog/common.h +++ b/include/spdlog/common.h @@ -95,7 +95,13 @@ using string_view_t = basic_string_view_t; #error SPDLOG_WCHAR_TO_UTF8_SUPPORT only supported on windows #else using wstring_view_t = basic_string_view_t; + +template +struct is_convertible_to_wstring_view : std::is_convertible { }; #endif // _WIN32 +#else +template +struct is_convertible_to_wstring_view : std::false_type { }; #endif // SPDLOG_WCHAR_TO_UTF8_SUPPORT #if defined(SPDLOG_NO_ATOMIC_LEVELS) diff --git a/include/spdlog/logger.h b/include/spdlog/logger.h index b9300bb8..63287d43 100644 --- a/include/spdlog/logger.h +++ b/include/spdlog/logger.h @@ -155,8 +155,8 @@ public: sink_it_(log_msg); } - // T cannot be statically converted to string_view - template::value, T>::type * = nullptr> + // T cannot be statically converted to string_view or wstring_view + template::value && !is_convertible_to_wstring_view::value, T>::type * = nullptr> void log(source_loc loc, level::level_enum lvl, const T &msg) { if (!should_log(lvl)) @@ -279,7 +279,7 @@ public: } // T can be statically converted to wstring_view - template::value, T>::type * = nullptr> + template::value, T>::type * = nullptr> void log(source_loc loc, level::level_enum lvl, const T &msg) { if (!should_log(lvl)) @@ -292,7 +292,7 @@ public: fmt::memory_buffer buf; details::os::wstr_to_utf8buf(msg, buf); - details::log_msg log_msg(loc, name_, lvl, buf); + details::log_msg log_msg(loc, name_, lvl, string_view_t(buf.data(), buf.size())); sink_it_(log_msg); } SPDLOG_LOGGER_CATCH()