https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108487
Alexander Monakov <amonakov at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|tree-optimization |libstdc++
--- Comment #3 from Alexander Monakov <amonakov at gcc dot gnu.org> ---
libstdc++ uses a less efficient specialization of _M_range_initialize.
With 10.2 headers, we use
template<typename _ForwardIterator>
void
_M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
std::forward_iterator_tag)
{
const size_type __n = std::distance(__first, __last);
this->_M_impl._M_start
= this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator()));
this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n;
this->_M_impl._M_finish =
std::__uninitialized_copy_a(__first, __last,
this->_M_impl._M_start,
_M_get_Tp_allocator());
}
but with 10.4 headers, we use
template<typename _InputIterator>
void
_M_range_initialize(_InputIterator __first, _InputIterator __last,
std::input_iterator_tag)
{
try {
for (; __first != __last; ++__first)
emplace_back(*__first);
} catch(...) {
clear();
throw;
}
}