diff --git a/include/experimental/optional b/include/experimental/optional index f32941b1a..ba06972a1 100644 --- a/include/experimental/optional +++ b/include/experimental/optional @@ -152,7 +152,7 @@ public: bad_optional_access() : std::logic_error("Bad optional Access") {} // Get the key function ~bad_optional_access() into the dylib - virtual ~bad_optional_access() _NOEXCEPT; + virtual ~bad_optional_access(); }; _LIBCPP_END_NAMESPACE_EXPERIMENTAL diff --git a/include/optional b/include/optional index b13a2d5f7..ff3e929e1 100644 --- a/include/optional +++ b/include/optional @@ -160,14 +160,12 @@ namespace std // purposefully not using versioning namespace { class _LIBCPP_EXCEPTION_ABI bad_optional_access - : public logic_error + : public exception { public: - _LIBCPP_INLINE_VISIBILITY - bad_optional_access() : logic_error("bad optional access") {} - // 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 diff --git a/src/optional.cpp b/src/optional.cpp index f2fbfdfec..baee026ac 100644 --- a/src/optional.cpp +++ b/src/optional.cpp @@ -13,12 +13,16 @@ 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 _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL -bad_optional_access::~bad_optional_access() _NOEXCEPT = default; +bad_optional_access::~bad_optional_access() = default; _LIBCPP_END_NAMESPACE_EXPERIMENTAL diff --git a/test/std/utilities/optional/optional.bad_optional_access/derive.pass.cpp b/test/std/utilities/optional/optional.bad_optional_access/derive.pass.cpp index 85e36d2c1..d96f70bb7 100644 --- a/test/std/utilities/optional/optional.bad_optional_access/derive.pass.cpp +++ b/test/std/utilities/optional/optional.bad_optional_access/derive.pass.cpp @@ -11,7 +11,7 @@ // -// class bad_optional_access : public logic_error +// class bad_optional_access : public exception #include #include @@ -20,6 +20,6 @@ int main() { using std::bad_optional_access; - static_assert(std::is_base_of::value, ""); - static_assert(std::is_convertible::value, ""); + static_assert(std::is_base_of::value, ""); + static_assert(std::is_convertible::value, ""); }