diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2017-09-04 18:08:56 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2017-09-04 18:08:56 +0100 |
commit | ae83fe38934b02c45ce4130692b0440e5ecc4559 (patch) | |
tree | 5033110f35a48cb074f98fc1a42ce3a0cb84c15c | |
parent | cc4f8ae5900c397c70cc356acc0b46d74c7872d4 (diff) | |
download | gcc-ae83fe38934b02c45ce4130692b0440e5ecc4559.zip gcc-ae83fe38934b02c45ce4130692b0440e5ecc4559.tar.gz gcc-ae83fe38934b02c45ce4130692b0440e5ecc4559.tar.bz2 |
PR libstdc++/81017 add noexcept to std::function move operations
Backport from mainline
2017-06-08 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/81017
* include/std/functional (function::function(function&&))
(function::operator=(function&&)): Add noexcept.
* testsuite/20_util/function/assign/move.cc: Check for noexcept.
* testsuite/20_util/function/cons/move.cc: Likewise.
From-SVN: r251678
-rw-r--r-- | libstdc++-v3/ChangeLog | 9 | ||||
-rw-r--r-- | libstdc++-v3/include/std/functional | 4 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/function/assign/move.cc | 5 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/20_util/function/cons/move.cc | 5 |
4 files changed, 17 insertions, 6 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1a998a6..465f996 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,6 +1,15 @@ 2017-09-04 Jonathan Wakely <jwakely@redhat.com> Backport from mainline + 2017-06-08 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/81017 + * include/std/functional (function::function(function&&)) + (function::operator=(function&&)): Add noexcept. + * testsuite/20_util/function/assign/move.cc: Check for noexcept. + * testsuite/20_util/function/cons/move.cc: Likewise. + + Backport from mainline 2017-06-05 Jonathan Wakely <jwakely@redhat.com> * include/bits/shared_ptr_base.h (__shared_ptr::owner_before) diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index ebbf7e8..2f30d2a 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -2025,7 +2025,7 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) * The newly-created %function contains the target of @a __x * (if it has one). */ - function(function&& __x) : _Function_base() + function(function&& __x) noexcept : _Function_base() { __x.swap(*this); } @@ -2084,7 +2084,7 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type) * object, then this operation will not throw an %exception. */ function& - operator=(function&& __x) + operator=(function&& __x) noexcept { function(std::move(__x)).swap(*this); return *this; diff --git a/libstdc++-v3/testsuite/20_util/function/assign/move.cc b/libstdc++-v3/testsuite/20_util/function/assign/move.cc index 31b74ef..d14350d 100644 --- a/libstdc++-v3/testsuite/20_util/function/assign/move.cc +++ b/libstdc++-v3/testsuite/20_util/function/assign/move.cc @@ -40,11 +40,12 @@ void test01() fo2 = (std::move(fo)); VERIFY( static_cast<bool>(fo2) ); VERIFY( fo2() == 2 ); + + static_assert(std::is_nothrow_move_assignable<function>::value, + "PR libstdc++/81017"); } int main() { test01(); - - return 0; } diff --git a/libstdc++-v3/testsuite/20_util/function/cons/move.cc b/libstdc++-v3/testsuite/20_util/function/cons/move.cc index a272cf5..8d7a5d1 100644 --- a/libstdc++-v3/testsuite/20_util/function/cons/move.cc +++ b/libstdc++-v3/testsuite/20_util/function/cons/move.cc @@ -38,11 +38,12 @@ void test01() function fo2(std::move(fo)); VERIFY( static_cast<bool>(fo2) ); VERIFY( fo2() == 2 ); + + static_assert(std::is_nothrow_move_constructible<function>::value, + "PR libstdc++/81017"); } int main() { test01(); - - return 0; } |