| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 1 | // -*- C++ -*- | 
|  | 2 | //===-------------------------- exception ---------------------------------===// | 
|  | 3 | // | 
| Howard Hinnant | f5256e1 | 2010-05-11 21:36:01 | [diff] [blame] | 4 | // The LLVM Compiler Infrastructure | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 5 | // | 
| Howard Hinnant | b64f8b0 | 2010-11-16 22:09:02 | [diff] [blame] | 6 | // This file is dual licensed under the MIT and the University of Illinois Open | 
|  | 7 | // Source Licenses. See LICENSE.TXT for details. | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 8 | // | 
|  | 9 | //===----------------------------------------------------------------------===// | 
|  | 10 |  | 
|  | 11 | #ifndef _LIBCPP_EXCEPTION | 
|  | 12 | #define _LIBCPP_EXCEPTION | 
|  | 13 |  | 
|  | 14 | /* | 
|  | 15 | exception synopsis | 
|  | 16 |  | 
|  | 17 | namespace std | 
|  | 18 | { | 
|  | 19 |  | 
|  | 20 | class exception | 
|  | 21 | { | 
|  | 22 | public: | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 23 | exception() noexcept; | 
|  | 24 | exception(const exception&) noexcept; | 
|  | 25 | exception& operator=(const exception&) noexcept; | 
|  | 26 | virtual ~exception() noexcept; | 
|  | 27 | virtual const char* what() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 28 | }; | 
|  | 29 |  | 
|  | 30 | class bad_exception | 
|  | 31 | : public exception | 
|  | 32 | { | 
|  | 33 | public: | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 34 | bad_exception() noexcept; | 
|  | 35 | bad_exception(const bad_exception&) noexcept; | 
|  | 36 | bad_exception& operator=(const bad_exception&) noexcept; | 
|  | 37 | virtual ~bad_exception() noexcept; | 
|  | 38 | virtual const char* what() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 39 | }; | 
|  | 40 |  | 
|  | 41 | typedef void (*unexpected_handler)(); | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 42 | unexpected_handler set_unexpected(unexpected_handler f ) noexcept; | 
|  | 43 | unexpected_handler get_unexpected() noexcept; | 
|  | 44 | [[noreturn]] void unexpected(); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 45 |  | 
|  | 46 | typedef void (*terminate_handler)(); | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 47 | terminate_handler set_terminate(terminate_handler f ) noexcept; | 
|  | 48 | terminate_handler get_terminate() noexcept; | 
|  | 49 | [[noreturn]] void terminate() noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 50 |  | 
| Marshall Clow | 8731c5d | 2015-06-02 15:33:38 | [diff] [blame] | 51 | bool uncaught_exception() noexcept; | 
|  | 52 | int uncaught_exceptions() noexcept; // C++17 | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 53 |  | 
|  | 54 | typedef unspecified exception_ptr; | 
|  | 55 |  | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 56 | exception_ptr current_exception() noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 57 | void rethrow_exception [[noreturn]] (exception_ptr p); | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 58 | template<class E> exception_ptr make_exception_ptr(E e) noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 59 |  | 
|  | 60 | class nested_exception | 
|  | 61 | { | 
|  | 62 | public: | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 63 | nested_exception() noexcept; | 
|  | 64 | nested_exception(const nested_exception&) noexcept = default; | 
|  | 65 | nested_exception& operator=(const nested_exception&) noexcept = default; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 66 | virtual ~nested_exception() = default; | 
|  | 67 |  | 
|  | 68 | // access functions | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 69 | [[noreturn]] void rethrow_nested() const; | 
|  | 70 | exception_ptr nested_ptr() const noexcept; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 71 | }; | 
|  | 72 |  | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 73 | template <class T> [[noreturn]] void throw_with_nested(T&& t); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 74 | template <class E> void rethrow_if_nested(const E& e); | 
|  | 75 |  | 
|  | 76 | } // std | 
|  | 77 |  | 
|  | 78 | */ | 
|  | 79 |  | 
|  | 80 | #include <__config> | 
|  | 81 | #include <cstddef> | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 82 | #include <type_traits> | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 83 |  | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 84 | #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 85 | #pragma GCC system_header | 
| Howard Hinnant | 08e1747 | 2011-10-17 20:05:10 | [diff] [blame] | 86 | #endif | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 87 |  | 
|  | 88 | namespace std // purposefully not using versioning namespace | 
|  | 89 | { | 
|  | 90 |  | 
|  | 91 | class _LIBCPP_EXCEPTION_ABI exception | 
|  | 92 | { | 
|  | 93 | public: | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 94 | _LIBCPP_INLINE_VISIBILITY exception() _NOEXCEPT {} | 
|  | 95 | virtual ~exception() _NOEXCEPT; | 
|  | 96 | virtual const char* what() const _NOEXCEPT; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 97 | }; | 
|  | 98 |  | 
|  | 99 | class _LIBCPP_EXCEPTION_ABI bad_exception | 
|  | 100 | : public exception | 
|  | 101 | { | 
|  | 102 | public: | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 103 | _LIBCPP_INLINE_VISIBILITY bad_exception() _NOEXCEPT {} | 
|  | 104 | virtual ~bad_exception() _NOEXCEPT; | 
|  | 105 | virtual const char* what() const _NOEXCEPT; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 106 | }; | 
|  | 107 |  | 
|  | 108 | typedef void (*unexpected_handler)(); | 
| Howard Hinnant | 83eade6 | 2013-03-06 23:30:19 | [diff] [blame] | 109 | _LIBCPP_FUNC_VIS unexpected_handler set_unexpected(unexpected_handler) _NOEXCEPT; | 
|  | 110 | _LIBCPP_FUNC_VIS unexpected_handler get_unexpected() _NOEXCEPT; | 
|  | 111 | _LIBCPP_NORETURN _LIBCPP_FUNC_VIS void unexpected(); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 112 |  | 
|  | 113 | typedef void (*terminate_handler)(); | 
| Howard Hinnant | 83eade6 | 2013-03-06 23:30:19 | [diff] [blame] | 114 | _LIBCPP_FUNC_VIS terminate_handler set_terminate(terminate_handler) _NOEXCEPT; | 
|  | 115 | _LIBCPP_FUNC_VIS terminate_handler get_terminate() _NOEXCEPT; | 
|  | 116 | _LIBCPP_NORETURN _LIBCPP_FUNC_VIS void terminate() _NOEXCEPT; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 117 |  | 
| Howard Hinnant | 83eade6 | 2013-03-06 23:30:19 | [diff] [blame] | 118 | _LIBCPP_FUNC_VIS bool uncaught_exception() _NOEXCEPT; | 
| Marshall Clow | 8731c5d | 2015-06-02 15:33:38 | [diff] [blame] | 119 | _LIBCPP_FUNC_VIS int uncaught_exceptions() _NOEXCEPT; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 120 |  | 
| Howard Hinnant | 83eade6 | 2013-03-06 23:30:19 | [diff] [blame] | 121 | class _LIBCPP_TYPE_VIS exception_ptr; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 122 |  | 
| Howard Hinnant | 0f678bd | 2013-08-12 18:38:34 | [diff] [blame] | 123 | _LIBCPP_FUNC_VIS exception_ptr current_exception() _NOEXCEPT; | 
|  | 124 | _LIBCPP_NORETURN _LIBCPP_FUNC_VIS void rethrow_exception(exception_ptr); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 125 |  | 
| Howard Hinnant | 83eade6 | 2013-03-06 23:30:19 | [diff] [blame] | 126 | class _LIBCPP_TYPE_VIS exception_ptr | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 127 | { | 
|  | 128 | void* __ptr_; | 
|  | 129 | public: | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 130 | _LIBCPP_INLINE_VISIBILITY exception_ptr() _NOEXCEPT : __ptr_() {} | 
|  | 131 | _LIBCPP_INLINE_VISIBILITY exception_ptr(nullptr_t) _NOEXCEPT : __ptr_() {} | 
|  | 132 | exception_ptr(const exception_ptr&) _NOEXCEPT; | 
|  | 133 | exception_ptr& operator=(const exception_ptr&) _NOEXCEPT; | 
|  | 134 | ~exception_ptr() _NOEXCEPT; | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 135 |  | 
| Howard Hinnant | 422a53f | 2010-09-21 21:28:23 | [diff] [blame] | 136 | _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | 7786188 | 2012-02-21 21:46:43 | [diff] [blame] | 137 | _LIBCPP_EXPLICIT | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 138 | operator bool() const _NOEXCEPT {return __ptr_ != nullptr;} | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 139 |  | 
| Howard Hinnant | 422a53f | 2010-09-21 21:28:23 | [diff] [blame] | 140 | friend _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 141 | bool operator==(const exception_ptr& __x, const exception_ptr& __y) _NOEXCEPT | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 142 | {return __x.__ptr_ == __y.__ptr_;} | 
| Howard Hinnant | 422a53f | 2010-09-21 21:28:23 | [diff] [blame] | 143 | friend _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 144 | bool operator!=(const exception_ptr& __x, const exception_ptr& __y) _NOEXCEPT | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 145 | {return !(__x == __y);} | 
|  | 146 |  | 
| Howard Hinnant | 0f678bd | 2013-08-12 18:38:34 | [diff] [blame] | 147 | friend _LIBCPP_FUNC_VIS exception_ptr current_exception() _NOEXCEPT; | 
|  | 148 | friend _LIBCPP_FUNC_VIS void rethrow_exception(exception_ptr); | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 149 | }; | 
|  | 150 |  | 
| Howard Hinnant | 9996844 | 2011-11-29 18:15:50 | [diff] [blame] | 151 | template<class _Ep> | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 152 | exception_ptr | 
| Howard Hinnant | 9996844 | 2011-11-29 18:15:50 | [diff] [blame] | 153 | make_exception_ptr(_Ep __e) _NOEXCEPT | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 154 | { | 
| Howard Hinnant | d444470 | 2010-08-11 17:04:31 | [diff] [blame] | 155 | #ifndef _LIBCPP_NO_EXCEPTIONS | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 156 | try | 
|  | 157 | { | 
|  | 158 | throw __e; | 
|  | 159 | } | 
|  | 160 | catch (...) | 
|  | 161 | { | 
|  | 162 | return current_exception(); | 
|  | 163 | } | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 164 | #endif // _LIBCPP_NO_EXCEPTIONS | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 165 | } | 
|  | 166 |  | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 167 | // nested_exception | 
|  | 168 |  | 
|  | 169 | class _LIBCPP_EXCEPTION_ABI nested_exception | 
|  | 170 | { | 
|  | 171 | exception_ptr __ptr_; | 
|  | 172 | public: | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 173 | nested_exception() _NOEXCEPT; | 
|  | 174 | // nested_exception(const nested_exception&) noexcept = default; | 
|  | 175 | // nested_exception& operator=(const nested_exception&) noexcept = default; | 
|  | 176 | virtual ~nested_exception() _NOEXCEPT; | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 177 |  | 
|  | 178 | // access functions | 
| Richard Smith | 0405cc4 | 2012-07-26 02:04:22 | [diff] [blame] | 179 | _LIBCPP_NORETURN void rethrow_nested() const; | 
| Howard Hinnant | ed56921 | 2011-05-26 18:23:59 | [diff] [blame] | 180 | _LIBCPP_INLINE_VISIBILITY exception_ptr nested_ptr() const _NOEXCEPT {return __ptr_;} | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 181 | }; | 
|  | 182 |  | 
|  | 183 | template <class _Tp> | 
|  | 184 | struct __nested | 
|  | 185 | : public _Tp, | 
|  | 186 | public nested_exception | 
|  | 187 | { | 
| Howard Hinnant | 422a53f | 2010-09-21 21:28:23 | [diff] [blame] | 188 | _LIBCPP_INLINE_VISIBILITY explicit __nested(const _Tp& __t) : _Tp(__t) {} | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 189 | }; | 
|  | 190 |  | 
|  | 191 | template <class _Tp> | 
| Richard Smith | 0405cc4 | 2012-07-26 02:04:22 | [diff] [blame] | 192 | _LIBCPP_NORETURN | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 193 | void | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 194 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | 4b7a43d | 2011-05-26 17:07:32 | [diff] [blame] | 195 | throw_with_nested(_Tp&& __t, typename enable_if< | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 196 | is_class<typename remove_reference<_Tp>::type>::value && | 
|  | 197 | !is_base_of<nested_exception, typename remove_reference<_Tp>::type>::value | 
| Eric Fiselier | 3a0e430 | 2015-06-13 07:08:02 | [diff] [blame] | 198 | && !__libcpp_is_final<typename remove_reference<_Tp>::type>::value | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 199 | >::type* = 0) | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 200 | #else // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 201 | throw_with_nested (_Tp& __t, typename enable_if< | 
|  | 202 | is_class<_Tp>::value && !is_base_of<nested_exception, _Tp>::value | 
|  | 203 | >::type* = 0) | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 204 | #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 205 | { | 
| Howard Hinnant | d444470 | 2010-08-11 17:04:31 | [diff] [blame] | 206 | #ifndef _LIBCPP_NO_EXCEPTIONS | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 | [diff] [blame] | 207 | throw __nested<typename remove_reference<_Tp>::type>(_VSTD::forward<_Tp>(__t)); | 
| Howard Hinnant | d444470 | 2010-08-11 17:04:31 | [diff] [blame] | 208 | #endif | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 209 | } | 
|  | 210 |  | 
|  | 211 | template <class _Tp> | 
| Richard Smith | 0405cc4 | 2012-07-26 02:04:22 | [diff] [blame] | 212 | _LIBCPP_NORETURN | 
| Howard Hinnant | 324bb03 | 2010-08-22 00:02:43 | [diff] [blame] | 213 | void | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 214 | #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | 4b7a43d | 2011-05-26 17:07:32 | [diff] [blame] | 215 | throw_with_nested(_Tp&& __t, typename enable_if< | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 216 | !is_class<typename remove_reference<_Tp>::type>::value || | 
|  | 217 | is_base_of<nested_exception, typename remove_reference<_Tp>::type>::value | 
| Eric Fiselier | 3a0e430 | 2015-06-13 07:08:02 | [diff] [blame] | 218 | || __libcpp_is_final<typename remove_reference<_Tp>::type>::value | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 219 | >::type* = 0) | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 220 | #else // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 221 | throw_with_nested (_Tp& __t, typename enable_if< | 
|  | 222 | !is_class<_Tp>::value || is_base_of<nested_exception, _Tp>::value | 
|  | 223 | >::type* = 0) | 
| Howard Hinnant | 73d21a4 | 2010-09-04 23:28:19 | [diff] [blame] | 224 | #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 225 | { | 
| Howard Hinnant | d444470 | 2010-08-11 17:04:31 | [diff] [blame] | 226 | #ifndef _LIBCPP_NO_EXCEPTIONS | 
| Howard Hinnant | 0949eed | 2011-06-30 21:18:19 | [diff] [blame] | 227 | throw _VSTD::forward<_Tp>(__t); | 
| Howard Hinnant | d444470 | 2010-08-11 17:04:31 | [diff] [blame] | 228 | #endif | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 229 | } | 
|  | 230 |  | 
| Howard Hinnant | 9996844 | 2011-11-29 18:15:50 | [diff] [blame] | 231 | template <class _Ep> | 
| Howard Hinnant | 422a53f | 2010-09-21 21:28:23 | [diff] [blame] | 232 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 233 | void | 
| Howard Hinnant | 9996844 | 2011-11-29 18:15:50 | [diff] [blame] | 234 | rethrow_if_nested(const _Ep& __e, typename enable_if< | 
|  | 235 | is_polymorphic<_Ep>::value | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 236 | >::type* = 0) | 
|  | 237 | { | 
| Marshall Clow | b6621c5 | 2015-12-14 18:01:56 | [diff] [blame] | 238 | const nested_exception* __nep = dynamic_cast<const nested_exception*>(_VSTD::addressof(__e)); | 
| Howard Hinnant | 6bb9f58 | 2010-05-28 13:35:41 | [diff] [blame] | 239 | if (__nep) | 
|  | 240 | __nep->rethrow_nested(); | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 241 | } | 
|  | 242 |  | 
| Howard Hinnant | 9996844 | 2011-11-29 18:15:50 | [diff] [blame] | 243 | template <class _Ep> | 
| Howard Hinnant | 422a53f | 2010-09-21 21:28:23 | [diff] [blame] | 244 | inline _LIBCPP_INLINE_VISIBILITY | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 245 | void | 
| Howard Hinnant | ec3773c | 2011-12-01 20:21:04 | [diff] [blame] | 246 | rethrow_if_nested(const _Ep&, typename enable_if< | 
| Howard Hinnant | 9996844 | 2011-11-29 18:15:50 | [diff] [blame] | 247 | !is_polymorphic<_Ep>::value | 
| Howard Hinnant | ed2c291 | 2010-05-27 17:06:52 | [diff] [blame] | 248 | >::type* = 0) | 
|  | 249 | { | 
|  | 250 | } | 
|  | 251 |  | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 252 | } // std | 
|  | 253 |  | 
| Howard Hinnant | bc8d3f9 | 2010-05-11 19:42:16 | [diff] [blame] | 254 | #endif // _LIBCPP_EXCEPTION |