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

--- Comment #5 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-14 branch has been updated by Jonathan Wakely
<r...@gcc.gnu.org>:

https://gcc.gnu.org/g:a5ce37b32d6a32e774ba4e156fe0d6d3f4e616fe

commit r14-11213-ga5ce37b32d6a32e774ba4e156fe0d6d3f4e616fe
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Tue Dec 17 17:38:43 2024 +0000

    libstdc++: Fix std::deque::emplace calling wrong _M_insert_aux [PR90389]

    We have several overloads of std::deque::_M_insert_aux, one of which is
    variadic and called by std::deque::emplace. With a suitable set of
    arguments to emplace, it's possible for one of the non-variadic
    _M_insert_aux overloads to be selected by overload resolution, making
    emplace ill-formed.

    Rename the variadic _M_insert_aux to _M_emplace_aux so that calls to
    emplace never select an _M_insert_aux overload. Also add an inline
    _M_insert_aux for the const lvalue overload that is called from
    insert(const_iterator, const value_type&).

    libstdc++-v3/ChangeLog:

            PR libstdc++/90389
            * include/bits/deque.tcc (_M_insert_aux): Rename variadic
            overload to _M_emplace_aux.
            * include/bits/stl_deque.h (_M_insert_aux): Define inline.
            (_M_emplace_aux): Declare.
            * testsuite/23_containers/deque/modifiers/emplace/90389.cc: New
            test.

    (cherry picked from commit 5f44b1776e748a7528020557036740905a11b1df)

Reply via email to