PR libstdc++/83982 fix exception-safety guarantee of std::vector::resize
authorDaniel Trebbien <dtrebbien@gmail.com>
Thu, 14 Jun 2018 09:26:51 +0000 (09:26 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 14 Jun 2018 09:26:51 +0000 (10:26 +0100)
commit4c1d999a7e937da0d417e8153f54b646603bb210
treea759ed4858add51262b507d4cd3eb47b79f73fad
parentc7a42ade9befecb8fca501b5e2021c09496f3554
PR libstdc++/83982 fix exception-safety guarantee of std::vector::resize

Construct new elements before moving existing ones, so that if a default
constructor throws, the existing elements are not left in a moved-from
state.

2018-06-14  Daniel Trebbien <dtrebbien@gmail.com>
    Jonathan Wakely  <jwakely@redhat.com>

PR libstdc++/83982
* include/bits/vector.tcc (vector::_M_default_append(size_type)):
Default-construct new elements before moving existing ones.
* testsuite/23_containers/vector/capacity/resize/strong_guarantee.cc:
New.

Co-Authored-By: Jonathan Wakely <jwakely@redhat.com>
From-SVN: r261585
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/vector.tcc
libstdc++-v3/testsuite/23_containers/vector/capacity/resize/strong_guarantee.cc [new file with mode: 0644]