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.
Showing
- libstdc++-v3/include/bits/deque.tcc 3 additions, 3 deletionslibstdc++-v3/include/bits/deque.tcc
- libstdc++-v3/include/bits/stl_deque.h 5 additions, 1 deletionlibstdc++-v3/include/bits/stl_deque.h
- libstdc++-v3/testsuite/23_containers/deque/modifiers/emplace/90389.cc 43 additions, 0 deletions.../testsuite/23_containers/deque/modifiers/emplace/90389.cc
Loading
Please register or sign in to comment