aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2017-09-04 18:08:56 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2017-09-04 18:08:56 +0100
commitae83fe38934b02c45ce4130692b0440e5ecc4559 (patch)
tree5033110f35a48cb074f98fc1a42ce3a0cb84c15c
parentcc4f8ae5900c397c70cc356acc0b46d74c7872d4 (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--libstdc++-v3/include/std/functional4
-rw-r--r--libstdc++-v3/testsuite/20_util/function/assign/move.cc5
-rw-r--r--libstdc++-v3/testsuite/20_util/function/cons/move.cc5
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;
}