From c89a25185243559cfa8401a389caca4ffaffc94f Mon Sep 17 00:00:00 2001 From: redi Date: Thu, 8 Jun 2017 14:27:45 +0000 Subject: [PATCH] PR libstdc++/81017 add noexcept to std::function move operations PR libstdc++/81017 * include/bits/std_function.h (function::function(function&&)) (function::operator=(funtion&&)): Add noexcept. * testsuite/20_util/function/assign/move.cc: Check for noexcept. * testsuite/20_util/function/cons/move.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@249018 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 8 ++++++++ libstdc++-v3/include/bits/std_function.h | 4 ++-- libstdc++-v3/testsuite/20_util/function/assign/move.cc | 5 +++-- libstdc++-v3/testsuite/20_util/function/cons/move.cc | 5 +++-- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index a53c1ece09a..6896c15fa6e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2017-06-08 Jonathan Wakely + + PR libstdc++/81017 + * include/bits/std_function.h (function::function(function&&)) + (function::operator=(funtion&&)): Add noexcept. + * testsuite/20_util/function/assign/move.cc: Check for noexcept. + * testsuite/20_util/function/cons/move.cc: Likewise. + 2017-06-07 Jonathan Wakely * include/bits/regex.h (basic_regex): Add deduction guide from P0433. diff --git a/libstdc++-v3/include/bits/std_function.h b/libstdc++-v3/include/bits/std_function.h index c4ea3473360..a9ba7567b33 100644 --- a/libstdc++-v3/include/bits/std_function.h +++ b/libstdc++-v3/include/bits/std_function.h @@ -438,7 +438,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * 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); } @@ -495,7 +495,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * 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 5264623c2f3..8658527fce4 100644 --- a/libstdc++-v3/testsuite/20_util/function/assign/move.cc +++ b/libstdc++-v3/testsuite/20_util/function/assign/move.cc @@ -38,11 +38,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 1cdfeeddbaf..7dbc511d326 100644 --- a/libstdc++-v3/testsuite/20_util/function/cons/move.cc +++ b/libstdc++-v3/testsuite/20_util/function/cons/move.cc @@ -36,11 +36,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; } -- 2.11.4.GIT