https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86521
--- Comment #15 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-8 branch has been updated by Jason Merrill <ja...@gcc.gnu.org>: https://gcc.gnu.org/g:f93784da474823ad563a9dfd6fd535a017b4bc9f commit r8-10078-gf93784da474823ad563a9dfd6fd535a017b4bc9f Author: Jason Merrill <ja...@redhat.com> Date: Wed Feb 26 00:33:52 2020 -0500 PR c++/86521 - wrong overload resolution with ref-qualifiers. Here we were wrongly treating binding a const lvalue ref to an xvalue as direct binding, which is wrong under [dcl.init.ref] and [over.match.ref]. gcc/cp/ChangeLog 2020-02-26 Jason Merrill <ja...@redhat.com> PR c++/86521 - wrong overload resolution with ref-qualifiers. * call.c (build_user_type_conversion_1): Don't use a conversion to a reference of the wrong rvalueness for direct binding. --- Comment #16 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-8 branch has been updated by Jason Merrill <ja...@gcc.gnu.org>: https://gcc.gnu.org/g:32988aac5be4fa472823e21d2d0eb877faca5667 commit r8-10080-g32988aac5be4fa472823e21d2d0eb877faca5667 Author: Jason Merrill <ja...@redhat.com> Date: Wed Feb 26 00:33:52 2020 -0500 PR c++/86521 - C++17 copy elision in initialization by constructor. This is an overlooked case in C++17 mandatory copy elision: We want overload resolution to reflect that initializing an object from a prvalue does not involve a copy or move constructor even when [over.match.ctor] says that only constructors are candidates. Here I implement that by looking through the copy/move constructor in joust. gcc/cp/ChangeLog 2020-02-26 Jason Merrill <ja...@redhat.com> PR c++/86521 - C++17 copy elision in initialization by constructor. * call.c (joust_maybe_elide_copy): New. (joust): Call it.