PR77987 Fix unique_ptr<T[], D>::reset(U) for T != U
authorJonathan Wakely <jwakely@redhat.com>
Mon, 17 Oct 2016 12:00:44 +0000 (13:00 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 17 Oct 2016 12:00:44 +0000 (13:00 +0100)
commit74cf9664e8a767a329131413de2271a4aae7488a
tree0ef4ef2ed5d22135910b345867ec3a81dc9c5f17
parent594ef205ae28bdd8d32ff141b41cc08158b84552
PR77987 Fix unique_ptr<T[], D>::reset(U) for T != U

PR libstdc++/77987
* include/bits/unique_ptr.h (unique_ptr<T[], D>::reset<U>(U)): Copy
value to pointer of the correct type to swap, to support conversions
allowed by LWG 2118 / N4089.
* testsuite/20_util/unique_ptr/assign/assign_neg.cc: Move test for
incompatible deleters from ...
* testsuite/20_util/unique_ptr/assign/cv_qual.cc: ... here.
* testsuite/20_util/unique_ptr/modifiers/cv_qual.cc: Move tests for
incompatible pointers to ...
* testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: ... here. Move
destructor definition to base class. Test for invalid derived-to-base
conversion.

From-SVN: r241235
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/unique_ptr.h
libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc
libstdc++-v3/testsuite/20_util/unique_ptr/assign/cv_qual.cc
libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/cv_qual.cc
libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc