https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79184
--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> --- I suppose we'll have to use something like --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -798,7 +798,15 @@ ocp_convert (tree type, tree expr, int convtype, int flags, to the underlying type first. */ if (SCOPED_ENUM_P (intype) && (convtype & CONV_STATIC)) e = build_nop (ENUM_UNDERLYING_TYPE (intype), e); - return cp_truthvalue_conversion (e); + if (complain & tf_warning) + return cp_truthvalue_conversion (e); + else + { + /* Prevent bogus -Wint-in-bool-context warnings coming + from c_common_truthvalue_conversion down the line. */ + warning_sentinel w (warn_int_in_bool_context); + return cp_truthvalue_conversion (e); + } } converted = convert_to_integer_maybe_fold (type, e, dofold); (that makes g++ not warn at all on the test from Comment 2)