diff options
author | clyne <clyne@bitgloo.com> | 2020-06-27 19:09:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-27 19:09:25 -0400 |
commit | d680c02d03e7a652f0b7e8daf4d52b7ae230c513 (patch) | |
tree | 433505f26d21f2bf5f25f5ef46b357efbb988867 | |
parent | 6ae484c8011dc5f10b552932dd3b977b46b4a1f5 (diff) | |
parent | 6e7939000f22dbc955d5aa7feff4db5541205e98 (diff) |
Merge pull request #1 from EnilPajic/patch-1-negative-minimum-value
Fixed potential bug with -MINIMUM_VALUE
-rw-r--r-- | to_string.hpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/to_string.hpp b/to_string.hpp index 3f04272..e7eef93 100644 --- a/to_string.hpp +++ b/to_string.hpp @@ -15,7 +15,7 @@ * @tparam N Number to convert * @tparam base Desired base, can be from 2 to 36 */ -template<auto N, unsigned int base, typename char_type, +template<auto N, int base, typename char_type, std::enable_if_t<std::is_integral_v<decltype(N)>, int> = 0, std::enable_if_t<(base > 1 && base < 37), int> = 0> class to_string_t { @@ -23,7 +23,7 @@ class to_string_t { // fits to the number perfectly. char_type buf[([]() constexpr noexcept { unsigned int len = N > 0 ? 1 : 2; - for (auto n = N < 0 ? -N : N; n; len++, n /= base); + for (auto n = N; n; len++, n /= base); return len; }())] = {}; @@ -35,8 +35,8 @@ class to_string_t { auto ptr = end(); *--ptr = '\0'; if (N != 0) { - for (auto n = N < 0 ? -N : N; n; n /= base) - *--ptr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[n % base]; + for (auto n = N; n; n /= base) + *--ptr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[(N < 0 ? -1 : 1) * (n % base)]; if (N < 0) *--ptr = '-'; } else { |