diff --git a/include/toml11/utility.hpp b/include/toml11/utility.hpp index 6113a9d..66dfc76 100644 --- a/include/toml11/utility.hpp +++ b/include/toml11/utility.hpp @@ -101,20 +101,22 @@ inline std::string make_string(std::size_t len, char c) // --------------------------------------------------------------------------- -template +template struct to_string_of_impl { - static_assert(sizeof(Char) == sizeof(char), ""); + static_assert(sizeof(Char) == sizeof(char), ""); + static_assert(sizeof(Char2) == sizeof(char), ""); - static std::basic_string invoke(std::string s) + static std::basic_string invoke(std::basic_string s) { std::basic_string retval; std::transform(s.begin(), s.end(), std::back_inserter(retval), - [](const char c) {return static_cast(c);}); + [](const Char2 c) {return static_cast(c);}); return retval; } template - static std::basic_string invoke(const char (&s)[N]) + static std::basic_string invoke(const Char2 (&s)[N]) { std::basic_string retval; std::transform(std::begin(s), std::end(s), std::back_inserter(retval), @@ -123,42 +125,38 @@ struct to_string_of_impl } }; -template<> -struct to_string_of_impl, std::allocator> +template +struct to_string_of_impl { - static std::string invoke(std::string s) + static_assert(sizeof(Char) == sizeof(char), ""); + + static std::basic_string invoke(std::basic_string s) { return s; } template - static std::string invoke(const char (&s)[N]) + static std::basic_string invoke(const Char (&s)[N]) { - return std::string(s); + return std::basic_string(s); } }; -template, - typename Alloc = std::allocator> -std::basic_string to_string_of(std::string s) +template, + typename Alloc = std::allocator, + typename Char2, typename Traits2, typename Alloc2> +std::basic_string +to_string_of(std::basic_string s) { - return to_string_of_impl::invoke(std::move(s)); + return to_string_of_impl::invoke(std::move(s)); } -template, - typename Alloc = std::allocator> +template, + typename Alloc = std::allocator, + typename Char2, typename Traits2, typename Alloc2, std::size_t N> std::basic_string to_string_of(const char (&s)[N]) { - return to_string_of_impl::template invoke(s); -} - -template -std::string to_char_string(std::basic_string s) -{ - static_assert(sizeof(Char) == sizeof(char), ""); - - std::string retval; - std::transform(s.begin(), s.end(), std::back_inserter(retval), - [](const Char c) {return static_cast(c);}); - return retval; + return to_string_of_impl::template invoke(s); } } // namespace detail