|
17 | 17 | #define TL_EXPECTED_HPP |
18 | 18 |
|
19 | 19 | #define TL_EXPECTED_VERSION_MAJOR 1 |
20 | | -#define TL_EXPECTED_VERSION_MINOR 2 |
| 20 | +#define TL_EXPECTED_VERSION_MINOR 3 |
21 | 21 | #define TL_EXPECTED_VERSION_PATCH 0 |
22 | 22 |
|
23 | 23 | #include <exception> |
@@ -219,20 +219,11 @@ struct unexpect_t { |
219 | 219 | }; |
220 | 220 | static constexpr unexpect_t unexpect{}; |
221 | 221 |
|
222 | | -namespace detail { |
223 | | -template <typename E> |
224 | | -[[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) { |
225 | 222 | #ifdef TL_EXPECTED_EXCEPTIONS_ENABLED |
226 | | - throw std::forward<E>(e); |
227 | | -#else |
228 | | - (void)e; |
229 | | -#ifdef _MSC_VER |
230 | | - __assume(0); |
231 | | -#else |
232 | | - __builtin_unreachable(); |
| 223 | +#define TL_EXPECTED_THROW_EXCEPTION(e) throw((e)); |
| 224 | +#elif defined(_MSC_VER) |
| 225 | +#define TL_EXPECTED_THROW_EXCEPTION(e) std::terminate(); |
233 | 226 | #endif |
234 | | -#endif |
235 | | -} |
236 | 227 |
|
237 | 228 | #ifndef TL_TRAITS_MUTEX |
238 | 229 | #define TL_TRAITS_MUTEX |
@@ -2024,28 +2015,28 @@ class TL_EXPECTED_NODISCARD expected : |
2024 | 2015 | detail::enable_if_t<!std::is_void<U>::value> * = nullptr> |
2025 | 2016 | TL_EXPECTED_11_CONSTEXPR const U &value() const & { |
2026 | 2017 | if (!has_value()) |
2027 | | - detail::throw_exception(bad_expected_access<E>(err().value())); |
| 2018 | + TL_EXPECTED_THROW_EXCEPTION(bad_expected_access<E>(err().value())); |
2028 | 2019 | return val(); |
2029 | 2020 | } |
2030 | 2021 | template <class U = T, |
2031 | 2022 | detail::enable_if_t<!std::is_void<U>::value> * = nullptr> |
2032 | 2023 | TL_EXPECTED_11_CONSTEXPR U &value() & { |
2033 | 2024 | if (!has_value()) |
2034 | | - detail::throw_exception(bad_expected_access<E>(err().value())); |
| 2025 | + TL_EXPECTED_THROW_EXCEPTION(bad_expected_access<E>(err().value())); |
2035 | 2026 | return val(); |
2036 | 2027 | } |
2037 | 2028 | template <class U = T, |
2038 | 2029 | detail::enable_if_t<!std::is_void<U>::value> * = nullptr> |
2039 | 2030 | TL_EXPECTED_11_CONSTEXPR const U &&value() const && { |
2040 | 2031 | if (!has_value()) |
2041 | | - detail::throw_exception(bad_expected_access<E>(std::move(err()).value())); |
| 2032 | + TL_EXPECTED_THROW_EXCEPTION(bad_expected_access<E>(std::move(err()).value())); |
2042 | 2033 | return std::move(val()); |
2043 | 2034 | } |
2044 | 2035 | template <class U = T, |
2045 | 2036 | detail::enable_if_t<!std::is_void<U>::value> * = nullptr> |
2046 | 2037 | TL_EXPECTED_11_CONSTEXPR U &&value() && { |
2047 | 2038 | if (!has_value()) |
2048 | | - detail::throw_exception(bad_expected_access<E>(std::move(err()).value())); |
| 2039 | + TL_EXPECTED_THROW_EXCEPTION(bad_expected_access<E>(std::move(err()).value())); |
2049 | 2040 | return std::move(val()); |
2050 | 2041 | } |
2051 | 2042 |
|
|
0 commit comments