Change the base class of std::bad_optional_access. This is a (subtle) ABI change, and is in response to http://http://wg21.link/LWG2806, which I *expect* to be adopted in Kona. I am making this change now in anticipation, and will get it into 4.0, because (a) 4.0 is the first release with std::optional, and (b) I don't want to make an ABI-change later, when the user base should be significantly larger. Note that I didn't change std::experimental::bad_optional_access, because that's still specified to derive from std::logic_error.
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@294133 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -152,7 +152,7 @@ public:
|
|||||||
bad_optional_access() : std::logic_error("Bad optional Access") {}
|
bad_optional_access() : std::logic_error("Bad optional Access") {}
|
||||||
|
|
||||||
// Get the key function ~bad_optional_access() into the dylib
|
// Get the key function ~bad_optional_access() into the dylib
|
||||||
virtual ~bad_optional_access() _NOEXCEPT;
|
virtual ~bad_optional_access();
|
||||||
};
|
};
|
||||||
|
|
||||||
_LIBCPP_END_NAMESPACE_EXPERIMENTAL
|
_LIBCPP_END_NAMESPACE_EXPERIMENTAL
|
||||||
|
|||||||
@@ -160,14 +160,12 @@ namespace std // purposefully not using versioning namespace
|
|||||||
{
|
{
|
||||||
|
|
||||||
class _LIBCPP_EXCEPTION_ABI bad_optional_access
|
class _LIBCPP_EXCEPTION_ABI bad_optional_access
|
||||||
: public logic_error
|
: public exception
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
_LIBCPP_INLINE_VISIBILITY
|
|
||||||
bad_optional_access() : logic_error("bad optional access") {}
|
|
||||||
|
|
||||||
// Get the key function ~bad_optional_access() into the dylib
|
// Get the key function ~bad_optional_access() into the dylib
|
||||||
virtual ~bad_optional_access() _NOEXCEPT;
|
virtual ~bad_optional_access();
|
||||||
|
virtual const char* what() const _NOEXCEPT;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // std
|
} // std
|
||||||
|
|||||||
@@ -13,12 +13,16 @@
|
|||||||
namespace std
|
namespace std
|
||||||
{
|
{
|
||||||
|
|
||||||
bad_optional_access::~bad_optional_access() _NOEXCEPT = default;
|
bad_optional_access::~bad_optional_access() = default;
|
||||||
|
|
||||||
|
const char* bad_optional_access::what() const _NOEXCEPT {
|
||||||
|
return "bad_optional_access";
|
||||||
|
}
|
||||||
|
|
||||||
} // std
|
} // std
|
||||||
|
|
||||||
_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL
|
_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL
|
||||||
|
|
||||||
bad_optional_access::~bad_optional_access() _NOEXCEPT = default;
|
bad_optional_access::~bad_optional_access() = default;
|
||||||
|
|
||||||
_LIBCPP_END_NAMESPACE_EXPERIMENTAL
|
_LIBCPP_END_NAMESPACE_EXPERIMENTAL
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
// <optional>
|
// <optional>
|
||||||
|
|
||||||
// class bad_optional_access : public logic_error
|
// class bad_optional_access : public exception
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
@@ -20,6 +20,6 @@ int main()
|
|||||||
{
|
{
|
||||||
using std::bad_optional_access;
|
using std::bad_optional_access;
|
||||||
|
|
||||||
static_assert(std::is_base_of<std::logic_error, bad_optional_access>::value, "");
|
static_assert(std::is_base_of<std::exception, bad_optional_access>::value, "");
|
||||||
static_assert(std::is_convertible<bad_optional_access*, std::logic_error*>::value, "");
|
static_assert(std::is_convertible<bad_optional_access*, std::exception*>::value, "");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user