fix: attr<T> constructor breaks on types that don't support std::to_string

pull/2673/head
Alex Denisov 3 years ago
parent 5c9bd58c41
commit 8360c8ae7e

@ -8,8 +8,8 @@
namespace spdlog { namespace spdlog {
namespace details { namespace details {
//template<typename T> // template<typename T>
//concept composable = std::same_as<T, bool> || std::integral<T> || std::floating_point<T> || std::convertible_to<T, std::string_view>; // concept composable = std::same_as<T, bool> || std::integral<T> || std::floating_point<T> || std::convertible_to<T, std::string_view>;
struct attr struct attr
{ {
@ -17,14 +17,16 @@ struct attr
std::string value; std::string value;
public: public:
attr(std::initializer_list<string_view_t> l) { attr(std::initializer_list<string_view_t> l)
if (l.size() != 2) return; // throw exception if not kv pair? {
if (l.size() != 2)
return; // throw exception if not kv pair?
scramble(key, *l.begin()); scramble(key, *l.begin());
scramble(value, *(l.begin()+1)); scramble(value, *(l.begin() + 1));
} }
attr(string_view_t k, bool v) attr(string_view_t k, bool v)
: value{v ? "true" : "false"} : value{v ? "true" : "false"}
{ {
key = std::string{k.data(), k.size()}; key = std::string{k.data(), k.size()};
@ -36,10 +38,27 @@ public:
value = std::string{v.data(), v.size()}; value = std::string{v.data(), v.size()};
} }
attr(std::string k, std::string v) : key{k}, value{v} {} attr(std::string k, std::string v)
: key{k}
, value{v}
{}
template <typename T> attr(string_view_t k, long v)
attr(string_view_t k, T const &v) : value{std::to_string(v)}
{
key = std::string{k.data(), k.size()};
}
attr(string_view_t k, long long v)
: value{std::to_string(v)}
{
key = std::string{k.data(), k.size()};
}
attr(string_view_t k, unsigned long v)
: value{std::to_string(v)}
{
key = std::string{k.data(), k.size()};
}
attr(string_view_t k, unsigned long long v)
: value{std::to_string(v)} : value{std::to_string(v)}
{ {
key = std::string{k.data(), k.size()}; key = std::string{k.data(), k.size()};

Loading…
Cancel
Save