Fix compiler warning C4702 for MSVC-14 (#225)

* Fix compiler warning C4702  for MSVC-14
This commit is contained in:
Daniel Gomez Antonio 2020-09-14 19:07:53 -05:00 committed by GitHub
parent 584e0c3dd3
commit fd5cdfd547
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -564,21 +564,20 @@ namespace cxxopts
} // namespace detail
template <typename R, typename T>
R
checked_negate(T&& t, const std::string&, std::true_type)
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.
return static_cast<R>(-static_cast<R>(t-1)-1);
r = static_cast<R>(-static_cast<R>(t-1)-1);
}
template <typename R, typename T>
T
checked_negate(T&& t, const std::string& text, std::false_type)
void
checked_negate(R&, T&&, const std::string& text, std::false_type)
{
throw_or_mimic<argument_incorrect_type>(text);
return t;
}
template <typename T>
@ -643,9 +642,7 @@ namespace cxxopts
if (negative)
{
value = checked_negate<T>(result,
text,
std::integral_constant<bool, is_signed>());
checked_negate<T>(value, result, text, std::integral_constant<bool, is_signed>());
}
else
{