https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94888

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at gcc dot gnu.org

--- Comment #6 from Jason Merrill <jason at gcc dot gnu.org> ---
G++ doesn't elide the copy because the constructor template is not eligible for
copy elision: only non-template constructors are considered to be copy/move
constructors.  Without a destructor, the implicitly declared move constructor
is a better candidate than the template, but a user-declared destructor
prevents the implicit declaration of a move constructor.  Adding

Function(Function&&) = default;

to Function fixes the problem.

I don't know why other compilers do something different with this testcase.

Reply via email to