Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions stl/inc/exception
Original file line number Diff line number Diff line change
Expand Up @@ -238,13 +238,9 @@ _STD_BEGIN

_EXPORT_STD class exception_ptr {
public:
exception_ptr() noexcept {
__ExceptionPtrCreate(this);
}
exception_ptr() noexcept {}

exception_ptr(nullptr_t) noexcept {
__ExceptionPtrCreate(this);
}
exception_ptr(nullptr_t) noexcept {}

~exception_ptr() noexcept {
__ExceptionPtrDestroy(this);
Expand All @@ -267,12 +263,12 @@ public:

exception_ptr& operator=(nullptr_t) noexcept {
exception_ptr _Ptr;
__ExceptionPtrAssign(this, &_Ptr);
swap(*this, _Ptr);
return *this;
}

explicit operator bool() const noexcept {
return __ExceptionPtrToBool(this);
return _Data1 != nullptr;
}

static exception_ptr _Copy_exception(_In_ void* _Except, _In_ const void* _Ptr) {
Expand All @@ -286,11 +282,16 @@ public:
}

friend void swap(exception_ptr& _Lhs, exception_ptr& _Rhs) noexcept {
__ExceptionPtrSwap(&_Lhs, &_Rhs);
void* const _LhsData1 = _Lhs._Data1;
void* const _LhsData2 = _Lhs._Data2;
_Lhs._Data1 = _Rhs._Data1;
_Lhs._Data2 = _Rhs._Data2;
_Rhs._Data1 = _LhsData1;
_Rhs._Data2 = _LhsData2;
}

_NODISCARD friend bool operator==(const exception_ptr& _Lhs, const exception_ptr& _Rhs) noexcept {
return __ExceptionPtrCompare(&_Lhs, &_Rhs);
return _Lhs._Data1 == _Rhs._Data1;
}

_NODISCARD friend bool operator==(const exception_ptr& _Lhs, nullptr_t) noexcept {
Expand Down