From 525fe1cf88a56dbad47a1fcfee4e6bfe8dd3fbb4 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Sat, 21 May 2011 21:50:39 +0000 Subject: [PATCH] unique_ptr.h: Use noexcept per the FDIS. 2011-05-21 Paolo Carlini * include/bits/unique_ptr.h: Use noexcept per the FDIS. From-SVN: r174004 --- libstdc++-v3/ChangeLog | 4 ++ libstdc++-v3/include/bits/unique_ptr.h | 86 +++++++++++++------------- 2 files changed, 47 insertions(+), 43 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index e9fd3ac7c3a8..90554d89d79e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,7 @@ +2011-05-21 Paolo Carlini + + * include/bits/unique_ptr.h: Use noexcept per the FDIS. + 2011-05-20 Paolo Carlini * testsuite/21_strings/basic_string/requirements/exception/ diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h index e1f98b5f5c93..ec9c3c0b5c33 100644 --- a/libstdc++-v3/include/bits/unique_ptr.h +++ b/libstdc++-v3/include/bits/unique_ptr.h @@ -49,11 +49,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template struct default_delete { - constexpr default_delete() = default; + constexpr default_delete() noexcept = default; template::value>::type> - default_delete(const default_delete<_Up>&) { } + default_delete(const default_delete<_Up>&) noexcept { } void operator()(_Tp* __ptr) const @@ -70,7 +70,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template struct default_delete<_Tp[]> { - constexpr default_delete() = default; + constexpr default_delete() noexcept = default; void operator()(_Tp* __ptr) const @@ -111,35 +111,35 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef _Dp deleter_type; // Constructors. - constexpr unique_ptr() + constexpr unique_ptr() noexcept : _M_t() { static_assert(!std::is_pointer::value, "constructed with null function pointer deleter"); } explicit - unique_ptr(pointer __p) + unique_ptr(pointer __p) noexcept : _M_t(__p, deleter_type()) { static_assert(!std::is_pointer::value, "constructed with null function pointer deleter"); } unique_ptr(pointer __p, typename std::conditional::value, - deleter_type, const deleter_type&>::type __d) + deleter_type, const deleter_type&>::type __d) noexcept : _M_t(__p, __d) { } unique_ptr(pointer __p, - typename std::remove_reference::type&& __d) + typename std::remove_reference::type&& __d) noexcept : _M_t(std::move(__p), std::move(__d)) { static_assert(!std::is_reference::value, "rvalue deleter bound to reference"); } - constexpr unique_ptr(nullptr_t) + constexpr unique_ptr(nullptr_t) noexcept : _M_t() { static_assert(!std::is_pointer::value, "constructed with null function pointer deleter"); } // Move constructors. - unique_ptr(unique_ptr&& __u) + unique_ptr(unique_ptr&& __u) noexcept : _M_t(__u.release(), std::forward(__u.get_deleter())) { } template::value && std::is_convertible<_Ep, _Dp>::value))> ::type> - unique_ptr(unique_ptr<_Up, _Ep>&& __u) + unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) { } @@ -161,7 +161,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION std::enable_if::value && std::is_same<_Dp, default_delete<_Tp>>::value>::type> - unique_ptr(auto_ptr<_Up>&& __u) + unique_ptr(auto_ptr<_Up>&& __u) noexcept : _M_t(__u.release(), deleter_type()) { } #endif @@ -170,7 +170,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Assignment. unique_ptr& - operator=(unique_ptr&& __u) + operator=(unique_ptr&& __u) noexcept { reset(__u.release()); get_deleter() = std::forward(__u.get_deleter()); @@ -183,7 +183,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION pointer>::value && !std::is_array<_Up>::value>::type> unique_ptr& - operator=(unique_ptr<_Up, _Ep>&& __u) + operator=(unique_ptr<_Up, _Ep>&& __u) noexcept { reset(__u.release()); get_deleter() = std::forward<_Ep>(__u.get_deleter()); @@ -191,7 +191,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } unique_ptr& - operator=(nullptr_t) + operator=(nullptr_t) noexcept { reset(); return *this; @@ -206,30 +206,30 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } pointer - operator->() const + operator->() const noexcept { _GLIBCXX_DEBUG_ASSERT(get() != pointer()); return get(); } pointer - get() const + get() const noexcept { return std::get<0>(_M_t); } deleter_type& - get_deleter() + get_deleter() noexcept { return std::get<1>(_M_t); } const deleter_type& - get_deleter() const + get_deleter() const noexcept { return std::get<1>(_M_t); } - explicit operator bool() const + explicit operator bool() const noexcept { return get() == pointer() ? false : true; } // Modifiers. pointer - release() + release() noexcept { pointer __p = get(); std::get<0>(_M_t) = pointer(); @@ -237,7 +237,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } void - reset(pointer __p = pointer()) + reset(pointer __p = pointer()) noexcept { using std::swap; swap(std::get<0>(_M_t), __p); @@ -246,7 +246,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } void - swap(unique_ptr& __u) + swap(unique_ptr& __u) noexcept { using std::swap; swap(_M_t, __u._M_t); @@ -273,39 +273,39 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typedef _Dp deleter_type; // Constructors. - constexpr unique_ptr() + constexpr unique_ptr() noexcept : _M_t() { static_assert(!std::is_pointer::value, "constructed with null function pointer deleter"); } explicit - unique_ptr(pointer __p) + unique_ptr(pointer __p) noexcept : _M_t(__p, deleter_type()) { static_assert(!std::is_pointer::value, "constructed with null function pointer deleter"); } unique_ptr(pointer __p, typename std::conditional::value, - deleter_type, const deleter_type&>::type __d) + deleter_type, const deleter_type&>::type __d) noexcept : _M_t(__p, __d) { } - unique_ptr(pointer __p, - typename std::remove_reference::type && __d) + unique_ptr(pointer __p, typename + std::remove_reference::type && __d) noexcept : _M_t(std::move(__p), std::move(__d)) { static_assert(!std::is_reference::value, "rvalue deleter bound to reference"); } - constexpr unique_ptr(nullptr_t) + constexpr unique_ptr(nullptr_t) noexcept : _M_t() { static_assert(!std::is_pointer::value, "constructed with null function pointer deleter"); } // Move constructors. - unique_ptr(unique_ptr&& __u) + unique_ptr(unique_ptr&& __u) noexcept : _M_t(__u.release(), std::forward(__u.get_deleter())) { } template - unique_ptr(unique_ptr<_Up, _Ep>&& __u) + unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) { } @@ -314,7 +314,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // Assignment. unique_ptr& - operator=(unique_ptr&& __u) + operator=(unique_ptr&& __u) noexcept { reset(__u.release()); get_deleter() = std::forward(__u.get_deleter()); @@ -323,7 +323,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template unique_ptr& - operator=(unique_ptr<_Up, _Ep>&& __u) + operator=(unique_ptr<_Up, _Ep>&& __u) noexcept { reset(__u.release()); get_deleter() = std::forward<_Ep>(__u.get_deleter()); @@ -331,7 +331,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } unique_ptr& - operator=(nullptr_t) + operator=(nullptr_t) noexcept { reset(); return *this; @@ -346,23 +346,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } pointer - get() const + get() const noexcept { return std::get<0>(_M_t); } deleter_type& - get_deleter() + get_deleter() noexcept { return std::get<1>(_M_t); } const deleter_type& - get_deleter() const + get_deleter() const noexcept { return std::get<1>(_M_t); } - explicit operator bool() const + explicit operator bool() const noexcept { return get() == pointer() ? false : true; } // Modifiers. pointer - release() + release() noexcept { pointer __p = get(); std::get<0>(_M_t) = pointer(); @@ -370,7 +370,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } void - reset(pointer __p = pointer()) + reset(pointer __p = pointer()) noexcept { using std::swap; swap(std::get<0>(_M_t), __p); @@ -379,7 +379,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } void - reset(nullptr_t) + reset(nullptr_t) noexcept { pointer __p = get(); std::get<0>(_M_t) = pointer(); @@ -392,7 +392,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION void reset(_Up) = delete; void - swap(unique_ptr& __u) + swap(unique_ptr& __u) noexcept { using std::swap; swap(_M_t, __u._M_t); @@ -420,12 +420,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION explicit unique_ptr(_Up*, typename std::enable_if::value>::type* = 0) = delete; - }; + }; template inline void swap(unique_ptr<_Tp, _Dp>& __x, - unique_ptr<_Tp, _Dp>& __y) + unique_ptr<_Tp, _Dp>& __y) noexcept { __x.swap(__y); } template