From: Jonathan Wakely Date: Mon, 4 Sep 2017 16:52:20 +0000 (+0100) Subject: PR libstdc++/81017 add noexcept to std::function move operations X-Git-Tag: releases/gcc-6.5.0~834 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f3aca8e0d9f74bdfeeba5cbe0d8673a8ef98fdeb;p=thirdparty%2Fgcc.git PR libstdc++/81017 add noexcept to std::function move operations Backport from mainline 2017-06-08 Jonathan Wakely 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: r251674 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1e902da3f1c4..444a1c00fec2 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,14 @@ 2017-09-04 Jonathan Wakely + Backport from mainline + 2017-06-08 Jonathan Wakely + + 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 diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index ecc9fa94d1a9..47774805e44b 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -1885,7 +1885,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); } @@ -1944,7 +1944,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 e79264660644..e57794fcfb76 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(fo2) ); VERIFY( fo2() == 2 ); + + static_assert(std::is_nothrow_move_assignable::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 3bd1eda79dc7..88e8bdda5519 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(fo2) ); VERIFY( fo2() == 2 ); + + static_assert(std::is_nothrow_move_constructible::value, + "PR libstdc++/81017"); } int main() { test01(); - - return 0; }