forked from fmtlib/fmt
Fix a bogus MSVC warning about unreachable code, take 2
This commit is contained in:
@ -740,8 +740,8 @@ class basic_parse_context : private ErrorHandler {
|
|||||||
|
|
||||||
FMT_CONSTEXPR bool check_arg_id(unsigned) {
|
FMT_CONSTEXPR bool check_arg_id(unsigned) {
|
||||||
if (next_arg_id_ > 0) {
|
if (next_arg_id_ > 0) {
|
||||||
return on_error(
|
on_error("cannot switch from automatic to manual argument indexing");
|
||||||
"cannot switch from automatic to manual argument indexing"), false;
|
return false;
|
||||||
}
|
}
|
||||||
next_arg_id_ = -1;
|
next_arg_id_ = -1;
|
||||||
return true;
|
return true;
|
||||||
|
@ -98,7 +98,23 @@
|
|||||||
|
|
||||||
#ifndef FMT_THROW
|
#ifndef FMT_THROW
|
||||||
# if FMT_EXCEPTIONS
|
# if FMT_EXCEPTIONS
|
||||||
# define FMT_THROW(x) throw x
|
# if FMT_MSC_VER
|
||||||
|
FMT_BEGIN_NAMESPACE
|
||||||
|
namespace internal {
|
||||||
|
template <typename Exception>
|
||||||
|
inline void do_throw(const Exception &x) {
|
||||||
|
// Silence unreachable code warnings in MSVC because these are nearly
|
||||||
|
// impossible to fix in a generic code.
|
||||||
|
volatile bool b = true;
|
||||||
|
if (b)
|
||||||
|
throw x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FMT_END_NAMESPACE
|
||||||
|
# define FMT_THROW(x) fmt::internal::do_throw(x)
|
||||||
|
# else
|
||||||
|
# define FMT_THROW(x) throw x
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# define FMT_THROW(x) assert(false)
|
# define FMT_THROW(x) assert(false)
|
||||||
# endif
|
# endif
|
||||||
@ -1322,7 +1338,8 @@ template <typename Char, typename ErrorHandler>
|
|||||||
FMT_CONSTEXPR unsigned basic_parse_context<Char, ErrorHandler>::next_arg_id() {
|
FMT_CONSTEXPR unsigned basic_parse_context<Char, ErrorHandler>::next_arg_id() {
|
||||||
if (next_arg_id_ >= 0)
|
if (next_arg_id_ >= 0)
|
||||||
return internal::to_unsigned(next_arg_id_++);
|
return internal::to_unsigned(next_arg_id_++);
|
||||||
return on_error("cannot switch from manual to automatic argument indexing"), 0;
|
on_error("cannot switch from manual to automatic argument indexing");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct format_string {};
|
struct format_string {};
|
||||||
@ -1702,7 +1719,8 @@ class width_checker: public function<unsigned long long> {
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
FMT_CONSTEXPR typename std::enable_if<
|
FMT_CONSTEXPR typename std::enable_if<
|
||||||
!is_integer<T>::value, unsigned long long>::type operator()(T) {
|
!is_integer<T>::value, unsigned long long>::type operator()(T) {
|
||||||
return handler_.on_error("width is not integer"), 0;
|
handler_.on_error("width is not integer");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -1725,7 +1743,8 @@ class precision_checker: public function<unsigned long long> {
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
FMT_CONSTEXPR typename std::enable_if<
|
FMT_CONSTEXPR typename std::enable_if<
|
||||||
!is_integer<T>::value, unsigned long long>::type operator()(T) {
|
!is_integer<T>::value, unsigned long long>::type operator()(T) {
|
||||||
return handler_.on_error("precision is not integer"), 0;
|
handler_.on_error("precision is not integer");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -2056,8 +2075,10 @@ FMT_CONSTEXPR Iterator parse_format_specs(Iterator it, SpecHandler &&handler) {
|
|||||||
}
|
}
|
||||||
if (align != ALIGN_DEFAULT) {
|
if (align != ALIGN_DEFAULT) {
|
||||||
if (p != it) {
|
if (p != it) {
|
||||||
if (c == '{')
|
if (c == '{') {
|
||||||
return handler.on_error("invalid fill character '{'"), it;
|
handler.on_error("invalid fill character '{'");
|
||||||
|
return it;
|
||||||
|
}
|
||||||
it += 2;
|
it += 2;
|
||||||
handler.on_fill(c);
|
handler.on_fill(c);
|
||||||
} else ++it;
|
} else ++it;
|
||||||
|
Reference in New Issue
Block a user