1616#include < __memory/construct_at.h>
1717#include < __type_traits/decay.h>
1818#include < __type_traits/is_pointer.h>
19+ #include < __utility/move.h>
20+ #include < __utility/swap.h>
1921#include < cstdlib>
2022#include < typeinfo>
2123
2224#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
2325# pragma GCC system_header
2426#endif
2527
28+ _LIBCPP_PUSH_MACROS
29+ #include < __undef_macros>
30+
2631#ifndef _LIBCPP_ABI_MICROSOFT
2732
2833# if _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION
@@ -57,6 +62,8 @@ _LIBCPP_BEGIN_UNVERSIONED_NAMESPACE_STD
5762
5863#ifndef _LIBCPP_ABI_MICROSOFT
5964
65+ inline _LIBCPP_HIDE_FROM_ABI void swap (exception_ptr& __x, exception_ptr& __y) _NOEXCEPT;
66+
6067class _LIBCPP_EXPORTED_FROM_ABI exception_ptr {
6168 void * __ptr_;
6269
@@ -75,7 +82,15 @@ class _LIBCPP_EXPORTED_FROM_ABI exception_ptr {
7582 _LIBCPP_HIDE_FROM_ABI exception_ptr (nullptr_t ) _NOEXCEPT : __ptr_() {}
7683
7784 exception_ptr (const exception_ptr&) _NOEXCEPT;
85+ _LIBCPP_HIDE_FROM_ABI exception_ptr (exception_ptr&& __other) _NOEXCEPT : __ptr_(__other.__ptr_) {
86+ __other.__ptr_ = nullptr ;
87+ }
7888 exception_ptr& operator =(const exception_ptr&) _NOEXCEPT;
89+ _LIBCPP_HIDE_FROM_ABI exception_ptr& operator =(exception_ptr&& __other) _NOEXCEPT {
90+ exception_ptr __tmp (std::move (__other));
91+ std::swap (__tmp, *this );
92+ return *this ;
93+ }
7994 ~exception_ptr () _NOEXCEPT;
8095
8196 _LIBCPP_HIDE_FROM_ABI explicit operator bool () const _NOEXCEPT { return __ptr_ != nullptr ; }
@@ -88,10 +103,16 @@ class _LIBCPP_EXPORTED_FROM_ABI exception_ptr {
88103 return !(__x == __y);
89104 }
90105
106+ friend _LIBCPP_HIDE_FROM_ABI void swap (exception_ptr& __x, exception_ptr& __y) _NOEXCEPT;
107+
91108 friend _LIBCPP_EXPORTED_FROM_ABI exception_ptr current_exception () _NOEXCEPT;
92109 friend _LIBCPP_EXPORTED_FROM_ABI void rethrow_exception (exception_ptr);
93110};
94111
112+ inline _LIBCPP_HIDE_FROM_ABI void swap (exception_ptr& __x, exception_ptr& __y) _NOEXCEPT {
113+ std::swap (__x.__ptr_ , __y.__ptr_ );
114+ }
115+
95116# if _LIBCPP_HAS_EXCEPTIONS
96117# if _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION
97118template <class _Ep >
@@ -201,4 +222,6 @@ _LIBCPP_HIDE_FROM_ABI exception_ptr make_exception_ptr(_Ep __e) _NOEXCEPT {
201222#endif // _LIBCPP_ABI_MICROSOFT
202223_LIBCPP_END_UNVERSIONED_NAMESPACE_STD
203224
225+ _LIBCPP_POP_MACROS
226+
204227#endif // _LIBCPP___EXCEPTION_EXCEPTION_PTR_H
0 commit comments