diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-02-11 13:25:42 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-02-11 13:25:42 +0000 |
commit | e392b74caad5d93946653d4656f1b354fa0ef713 (patch) | |
tree | 0432181d8ae0e410bfb961f7d0a14a6b60b68b6c | |
parent | 7c24d4db412189cf83de2bb328543564c8ad9224 (diff) |
Vendor import of libc++ release_40 branch r294803:vendor/libc++/libc++-release_40-r294803
Notes
Notes:
svn path=/vendor/libc++/dist/; revision=313638
svn path=/vendor/libc++/libc++-release_40-r294803/; revision=313639; tag=vendor/libc++/libc++-release_40-r294803
-rw-r--r-- | docs/conf.py | 4 | ||||
-rw-r--r-- | include/optional | 6 | ||||
-rw-r--r-- | include/variant | 2 | ||||
-rw-r--r-- | src/optional.cpp | 4 | ||||
-rw-r--r-- | test/std/utilities/optional/optional.bad_optional_access/derive.pass.cpp | 6 | ||||
-rw-r--r-- | test/std/utilities/variant/variant.visit/visit.pass.cpp | 11 |
6 files changed, 23 insertions, 10 deletions
diff --git a/docs/conf.py b/docs/conf.py index dee0367a4ed0..743d0f7edad0 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -47,9 +47,9 @@ copyright = u'2011-2017, LLVM Project' # built documents. # # The short X.Y version. -version = '4.0' +version = '4' # The full version, including alpha/beta/rc tags. -release = '4.0' +release = '4' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/include/optional b/include/optional index c002cc729059..8f47986242ca 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 const char* what() const _NOEXCEPT; }; } // std diff --git a/include/variant b/include/variant index f623cddc2002..bbd4bf4895ad 100644 --- a/include/variant +++ b/include/variant @@ -574,7 +574,7 @@ private: constexpr decltype(auto) operator()(_Alts&&... __alts) const { __std_visit_exhaustive_visitor_check< _Visitor, - decltype(_VSTD::forward<_Alts>(__alts).__value)...>(); + decltype((_VSTD::forward<_Alts>(__alts).__value))...>(); return __invoke_constexpr(_VSTD::forward<_Visitor>(__visitor), _VSTD::forward<_Alts>(__alts).__value...); } diff --git a/src/optional.cpp b/src/optional.cpp index f2fbfdfec1ce..2877d175bc1b 100644 --- a/src/optional.cpp +++ b/src/optional.cpp @@ -15,6 +15,10 @@ namespace std bad_optional_access::~bad_optional_access() _NOEXCEPT = default; +const char* bad_optional_access::what() const _NOEXCEPT { + return "bad_optional_access"; + } + } // std _LIBCPP_BEGIN_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 85e36d2c107d..d96f70bb7ba4 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 @@ // <optional> -// class bad_optional_access : public logic_error +// class bad_optional_access : public exception #include <optional> #include <type_traits> @@ -20,6 +20,6 @@ int main() { using std::bad_optional_access; - static_assert(std::is_base_of<std::logic_error, bad_optional_access>::value, ""); - static_assert(std::is_convertible<bad_optional_access*, std::logic_error*>::value, ""); + static_assert(std::is_base_of<std::exception, bad_optional_access>::value, ""); + static_assert(std::is_convertible<bad_optional_access*, std::exception*>::value, ""); } diff --git a/test/std/utilities/variant/variant.visit/visit.pass.cpp b/test/std/utilities/variant/variant.visit/visit.pass.cpp index 46d225883ae9..408a65c0903f 100644 --- a/test/std/utilities/variant/variant.visit/visit.pass.cpp +++ b/test/std/utilities/variant/variant.visit/visit.pass.cpp @@ -283,9 +283,20 @@ void test_exceptions() { #endif } +// See http://llvm.org/PR31916 +void test_caller_accepts_nonconst() { + struct A {}; + struct Visitor { + void operator()(A&) {} + }; + std::variant<A> v; + std::visit(Visitor{}, v); +} + int main() { test_call_operator_forwarding(); test_argument_forwarding(); test_constexpr(); test_exceptions(); + test_caller_accepts_nonconst(); } |