On 15 September 2013 10:12, Marc Glisse wrote:
>
>         PR libstdc++/58338
>         * include/bits/stl_vector.h
>         (_Vector_impl::_Vector_impl(_Tp_alloc_type const&),
>         _Vector_impl::_Vector_impl(_Tp_alloc_type&&),
>         _Vector_impl::_M_swap_data,
>         _Vector_base::_Vector_base(const allocator_type&),
>         _Vector_base::_Vector_base(allocator_type&&),
>         _Vector_base::_Vector_base(_Vector_base&&),
>         vector::vector(const allocator_type&), vector::operator[],
>         vector::operator[] const, vector::front, vector::front const,
>         vector::back, vector::back const, vector::pop_back,
>         vector::_M_erase_at_end): Mark as noexcept.
>         (vector::~vector): Remove useless noexcept.

Are you sure the noexcept on the destructors is useless?

A user-defined allocator type could have
is_nothrow_descructible<allocator_type>::value==false or
is_nothrow_destructible<pointer>::value==false, which would alter the
type of is_nothrow_destructible<vector<T, A>>.

Although the user-defined allocator must not actually throw from its
destructor, it is not required to have a noexcept destructor.
However, since it must not actually throw (irrespective of its
exception spec) we can unconditionally give std::vector a noexcept
destructor.

Reply via email to