|
|
|||
File indexing completed on 2025-12-16 09:59:09
0001 /* Traits for Outcome 0002 (C) 2018-2024 Niall Douglas <http://www.nedproductions.biz/> (3 commits) 0003 File Created: March 2018 0004 0005 0006 Boost Software License - Version 1.0 - August 17th, 2003 0007 0008 Permission is hereby granted, free of charge, to any person or organization 0009 obtaining a copy of the software and accompanying documentation covered by 0010 this license (the "Software") to use, reproduce, display, distribute, 0011 execute, and transmit the Software, and to prepare derivative works of the 0012 Software, and to permit third-parties to whom the Software is furnished to 0013 do so, all subject to the following: 0014 0015 The copyright notices in the Software and this entire statement, including 0016 the above license grant, this restriction and the following disclaimer, 0017 must be included in all copies of the Software, in whole or in part, and 0018 all derivative works of the Software, unless such copies or derivative 0019 works are solely in the form of machine-executable object code generated by 0020 a source language processor. 0021 0022 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 0023 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 0024 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 0025 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 0026 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 0027 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 0028 DEALINGS IN THE SOFTWARE. 0029 */ 0030 0031 #ifndef BOOST_OUTCOME_TRAIT_STD_EXCEPTION_HPP 0032 #define BOOST_OUTCOME_TRAIT_STD_EXCEPTION_HPP 0033 0034 #include "../config.hpp" 0035 0036 #include <exception> 0037 0038 BOOST_OUTCOME_V2_NAMESPACE_BEGIN 0039 0040 namespace policy 0041 { 0042 namespace detail 0043 { 0044 /* Pass through `make_exception_ptr` function for `std::exception_ptr`. 0045 */ 0046 inline std::exception_ptr make_exception_ptr(std::exception_ptr v) { return v; } 0047 0048 // Try ADL, if not use fall backs above 0049 template <class T> constexpr inline decltype(auto) exception_ptr(T &&v) { return make_exception_ptr(std::forward<T>(v)); } 0050 } // namespace detail 0051 0052 /*! AWAITING HUGO JSON CONVERSION TOOL 0053 SIGNATURE NOT RECOGNISED 0054 */ 0055 template <class T> constexpr inline decltype(auto) exception_ptr(T &&v) { return detail::exception_ptr(std::forward<T>(v)); } 0056 0057 namespace detail 0058 { 0059 template <bool has_error_payload> struct _rethrow_exception 0060 { 0061 template <class Exception> explicit _rethrow_exception(Exception && /*unused*/) // NOLINT 0062 { 0063 } 0064 }; 0065 template <> struct _rethrow_exception<true> 0066 { 0067 template <class Exception> explicit _rethrow_exception(Exception &&excpt) // NOLINT 0068 { 0069 // ADL 0070 rethrow_exception(policy::exception_ptr(std::forward<Exception>(excpt))); 0071 } 0072 }; 0073 } // namespace detail 0074 } // namespace policy 0075 0076 namespace trait 0077 { 0078 namespace detail 0079 { 0080 // Shortcut this for lower build impact 0081 template <> struct _is_exception_ptr_available<std::exception_ptr> 0082 { 0083 static constexpr bool value = true; 0084 using type = std::exception_ptr; 0085 }; 0086 } // namespace detail 0087 0088 // std::exception_ptr is an error type 0089 template <> struct is_error_type<std::exception_ptr> 0090 { 0091 static constexpr bool value = true; 0092 }; 0093 0094 } // namespace trait 0095 0096 BOOST_OUTCOME_V2_NAMESPACE_END 0097 0098 #endif
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|