PR c++/86521 - C++17 copy elision in initialization by constructor.
authorJason Merrill <jason@redhat.com>
Wed, 13 Mar 2019 23:34:51 +0000 (19:34 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 13 Mar 2019 23:34:51 +0000 (19:34 -0400)
commitdcfa8518868d9eb836971c8ff315a048defc28ec
treedcdcbd95fecd3558c0a89bba2765aa3605b3a022
parentedaff7c9448c4e4bdc4e4a42f5813ee543a1df31
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.

* call.c (joust_maybe_elide_copy): New.
(joust): Call it.

From-SVN: r269667
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/g++.dg/cpp0x/overload-conv-3.C
gcc/testsuite/g++.dg/overload/conv-op2.C