https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89660
--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Untested patch: --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -9433,10 +9433,12 @@ maybe_warn_pessimizing_move (tree retval, tree functype) } /* Warn if the move is redundant. It is redundant when we would do maybe-rvalue overload resolution even without std::move. */ - else if (treat_lvalue_as_rvalue_p (arg, /*parm_ok*/true)) + else if (warn_redundant_move + && treat_lvalue_as_rvalue_p (arg, /*parm_ok*/true)) { /* Make sure that the overload resolution would actually succeed if we removed the std::move call. */ + cp_unevaluated e; tree t = convert_for_initialization (NULL_TREE, functype, move (arg), (LOOKUP_NORMAL