From 31cc8f0c6e874e2417e76eda50af34fd17bcd90c Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Mon, 30 Aug 2021 01:50:13 +0300 Subject: [PATCH] Fix signedness errors from MSVC --- source/strings/lexicalcast.cpp | 10 +++++++++- source/strings/regex.cpp | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/source/strings/lexicalcast.cpp b/source/strings/lexicalcast.cpp index 1c1f720..2c867b2 100644 --- a/source/strings/lexicalcast.cpp +++ b/source/strings/lexicalcast.cpp @@ -19,6 +19,14 @@ template struct IsNegative { static bool eval(T) { return false; } }; +template::value> +struct Negate +{ static T eval(T v) { return -v; } }; + +template +struct Negate +{ static T eval(T v) { return (~v)+1; } }; + /* Helper to avoid errors about ambiguous function calls since there are no overloads of abs for unsigned types */ template::value> @@ -170,7 +178,7 @@ T str_to_int(const string &s, const Fmt &f) } if(neg) - result = -result; + result = Negate::eval(result); return result; } diff --git a/source/strings/regex.cpp b/source/strings/regex.cpp index 27361b0..832cd85 100644 --- a/source/strings/regex.cpp +++ b/source/strings/regex.cpp @@ -143,7 +143,7 @@ Regex::Code Regex::compile(const string &expr, string::const_iterator &iter, uns result += atom; } result += ND_JUMP; - write_int(-(atom.size()+jump_size), result); + write_int(-static_cast(atom.size()+jump_size), result); } else if(repeat_max>repeat_min) { -- 2.43.0