diff --git a/include/cxxopts.hpp b/include/cxxopts.hpp index 1644692..bb95ef3 100644 --- a/include/cxxopts.hpp +++ b/include/cxxopts.hpp @@ -544,23 +544,22 @@ namespace cxxopts } } - template - R - checked_negate(T&& t, const std::string&, std::true_type) - { - // if we got to here, then `t` is a positive number that fits into - // `R`. So to avoid MSVC C4146, we first cast it to `R`. - // See https://github.com/jarro2783/cxxopts/issues/62 for more details. - return static_cast(-static_cast(t-1)-1); - } + template + void + checked_negate(R& r, T&& t, const std::string&, std::true_type) + { + // if we got to here, then `t` is a positive number that fits into + // `R`. So to avoid MSVC C4146, we first cast it to `R`. + // See https://github.com/jarro2783/cxxopts/issues/62 for more details. + r = static_cast(-static_cast(t-1)-1); + } - template - T - checked_negate(T&& t, const std::string& text, std::false_type) - { - throw_or_mimic(text); - return t; - } + template + void + checked_negate(R&, T&&, const std::string& text, std::false_type) + { + throw_or_mimic(text); + } template void @@ -624,9 +623,7 @@ namespace cxxopts if (negative) { - value = checked_negate(result, - text, - std::integral_constant()); + checked_negate(value, result, text, std::integral_constant()); } else {