https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89158
--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> --- When reference_binding creates the conversion const int -> const int & the expression is still VIEW_CONVERT_EXPR<const int>(Val) so it doesn't set conv->need_temporary_p. Only then do we call mark_rvalue_use which turns it into NON_LVALUE_EXPR<42>.