From: Jonathan Wakely Date: Mon, 4 Sep 2017 17:08:56 +0000 (+0100) Subject: PR libstdc++/81017 add noexcept to std::function move operations X-Git-Tag: releases/gcc-5.5.0~82 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ae83fe38934b02c45ce4130692b0440e5ecc4559;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: r251678 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1a998a66cf74..465f996e967b 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 ebbf7e8798b4..2f30d2aa48fd 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 31b74efcb4cc..d14350d33739 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 a272cf5bc6ed..8d7a5d1d55db 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; }