I missed out the "noexcept" on these new functions.
* include/bits/shared_ptr.h (enable_shared_from_this::weak_from_this): Add noexcept. * include/bits/shared_ptr_base.h (__enable_shared_from_this::weak_from_this): Likewise. * testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc: Test exception-specification of weak_from_this. Tested powerpc64le-linux, committing to trunk.
commit 3f386e54098cb01df83a131ed4a8e22c0b0b52bd Author: Jonathan Wakely <jwak...@redhat.com> Date: Mon Oct 10 11:42:00 2016 +0100 Add noexcept to enable_shared_from_this::weak_from_this * include/bits/shared_ptr.h (enable_shared_from_this::weak_from_this): Add noexcept. * include/bits/shared_ptr_base.h (__enable_shared_from_this::weak_from_this): Likewise. * testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc: Test exception-specification of weak_from_this. diff --git a/libstdc++-v3/include/bits/shared_ptr.h b/libstdc++-v3/include/bits/shared_ptr.h index b2523b8..cbcb3b3 100644 --- a/libstdc++-v3/include/bits/shared_ptr.h +++ b/libstdc++-v3/include/bits/shared_ptr.h @@ -593,11 +593,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 #define __cpp_lib_enable_shared_from_this 201603 weak_ptr<_Tp> - weak_from_this() + weak_from_this() noexcept { return this->_M_weak_this; } weak_ptr<const _Tp> - weak_from_this() const + weak_from_this() const noexcept { return this->_M_weak_this; } #endif diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h index 4ae2668..e8820a1 100644 --- a/libstdc++-v3/include/bits/shared_ptr_base.h +++ b/libstdc++-v3/include/bits/shared_ptr_base.h @@ -1562,11 +1562,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 __weak_ptr<_Tp, _Lp> - weak_from_this() + weak_from_this() noexcept { return this->_M_weak_this; } __weak_ptr<const _Tp, _Lp> - weak_from_this() const + weak_from_this() const noexcept { return this->_M_weak_this; } #endif diff --git a/libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc b/libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc index b5ebb81..9c33396 100644 --- a/libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc +++ b/libstdc++-v3/testsuite/20_util/enable_shared_from_this/members/weak_from_this.cc @@ -26,6 +26,9 @@ struct X : public std::enable_shared_from_this<X> { }; +static_assert( noexcept(std::declval<X&>().weak_from_this()) ); +static_assert( noexcept(std::declval<const X&>().weak_from_this()) ); + void test01() {